문제

저는 현재 상당히 강력한 서버 측 검증 시스템을 갖추고 있지만 모든 측면을 다루었는지 확인하기 위해 피드백을 찾고 있습니다.제가 현재 하고 있는 일에 대한 간략한 개요는 다음과 같습니다.

  • 입력이 비어 있지 않거나 너무 길지 않은지 확인하세요.

  • SQL 삽입을 방지하기 위해 쿼리 문자열을 이스케이프하세요.

  • 정규식을 사용하여 유효하지 않은 문자 거부(제출된 항목에 따라 다름)

  • <script>와 같은 특정 html 태그 인코딩(모든 태그는 데이터베이스에 저장될 때 인코딩되며 일부 태그는 페이지에서 렌더링하도록 쿼리될 때 디코딩됨)

내가 놓친 것이 있나요?코드 샘플 또는 정규 표현식을 환영합니다.

도움이 되었습니까?

해결책

SQL 삽입을 방지하기 위해 쿼리 문자열을 "이스케이프"할 필요는 없습니다. 대신 준비된 문을 사용해야 합니다.

이상적으로 입력 필터링은 다른 처리보다 먼저 발생하므로 항상 사용된다는 것을 알 수 있습니다.그렇지 않으면 문제에 취약해질 수 있는 한 지점만 놓치면 되기 때문입니다.

XSS 공격을 방지하려면 출력 시 HTML 엔터티를 인코딩하는 것을 잊지 마세요.

다른 팁

'유효하지 않은'태그뿐만 아니라 모든 HTML 태그를 인코딩해야합니다. 이것은 뜨거운 논쟁이지만 기본적으로 항상 요약됩니다. 항상 올바르게 처리하는 것을 잊을 수있는 유효하지 않은 HTML 조합이 항상 있습니다 (중첩 태그, 일부 브라우저가 '올바르게 해석하는 비정기 태그 등). 따라서 가장 안전한 옵션은 모든 것을 htmlentities로 저장 한 다음 출력시 콘텐츠에서 검증 된 HTML-SAFE-SUBSET 트리 (엔티티)를 인쇄하는 것입니다.

한 영역의 개선이 모든 애플리케이션에 영향을 미치도록 작업 전용 라이브러리에서 모든 서버 측 유효성 검사를 실행하십시오.

또한 디렉토리 트래버스 및 쉘에 액세스하려는 시도와 같은 알려진 공격에 대한 작업이 포함됩니다.

이 질문/답변에는 당신이 찾고있는 좋은 반응이 있습니다.
(PHP 지향적이지만 다시 언어/플랫폼을 지정하지 않았으며 일부는 PHP 세계를 넘어서 적용됩니다.):

PHP로 사용자 입력을 소독하는 가장 좋은 방법은 무엇입니까?

당신은 그것을 확인할 수 있습니다 필터 확장 데이터 필터링 용. 그것은 당신이 완전히 밀폐하다는 것을 보장하지는 않지만, 개인적으로 나는 그것을 사용하는 많은 안구를 가지고 있기 때문에 개인적으로 그것을 사용하는 것이 훨씬 나아졌습니다.

또한 두 번째로 준비된 진술을 고려하십시오. SQL 쿼리에서 데이터를 피하는 것은 과거의 일입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top