문제

XSS 공격으로부터 응용 프로그램을 보호하기 위해 HTML 청정기를 사용하고 있습니다. 현재 Wysiwyg 편집기의 콘텐츠를 정화하고 있습니다. 왜냐하면 사용자가 XHTML 마크 업을 사용할 수있는 유일한 곳이기 때문입니다.

내 질문은 로그인 인증 시스템 (또는 이메일, 이름, 주소 등과 같은 가입 페이지의 입력 필드)에서 사용자 이름과 비밀번호에서 HTML Purifier를 사용해야합니까? 거기에서 XSS가 공격 할 가능성이 있습니까?

도움이 되었습니까?

해결책

페이지에 표시 될 수있는 모든 것을 정화해야합니다. XSS 공격으로 해커가 들어갑니다 <script> 다른 사이트에 연결할 수있는 태그 또는 기타 악의적 인 태그.

비밀번호와 이메일은 괜찮습니다. 비밀번호를 표시해서는 안되며 이메일에는 적절한 형식인지 확인하기 위해 자체 유효성 검사기가 있어야합니다.

마지막으로, 항상 컨텐츠에 htmlentities ()를 넣어야합니다.

오 .. 봐 filter_var 또한. 변수를 필터링하는 아주 좋은 방법.

다른 팁

한 사용자가 입력 한 데이터가있는 경우 XSS 위험이 존재합니다. 5월 다른 사용자가 볼 수 있습니다. 이 데이터가 현재 볼 수 없더라도이를 수행해야 할 필요성이 발생하지 않는다고 가정하지 마십시오.

사용자 이름과 비밀번호가 진행되는 한 비밀번호를 표시하거나 표시 할 수있는 양식으로 저장해서는 안됩니다 (즉 sha1()). 사용자 이름의 경우와 같은 법적 문자에 대한 제한 사항이 있습니다. [A-Za-z0-9_]. 마지막으로, 다른 답변에서 알 수 있듯이, 예약 된 데이터 또는 특수 HTML 문자가 포함될 수있는 입력 된 데이터에 대해 언어 HTML Entity 인코딩 기능을 사용 하여이 데이터가 표시 될 때 구문 오류를 일으키지 않도록합니다.

아니요, 로그인 인증 중에 사용자 이름과 비밀번호에서 htmlpurifier를 사용하지 않습니다. 내 appllications에서는 영숫자 사용자 이름과 입력 유효성 검사 필터를 사용하여 ENT_QUOTES를 사용하여 HTMLSpecialchars로 표시합니다. 이것은 HTMLPurifier보다 매우 효과적이며 지옥이 훨씬 빠릅니다. 영숫자 문자열을 사용하여 XSS 공격을 아직 보지 못했습니다. 그리고 btw htmlpurifier는 어쨌든 영숫자 콘텐츠를 필터링 할 때 쓸모가 없으므로, 입력 문자열을 영숫자 필터를 통해 강제로 강제하면 htmlpurifier와 함께 표시 할 포인트가 없습니다. 암호와 관련하여 XSS의 가능성을 제거하는 첫 번째 장소에 아무도 표시해서는 안됩니다. 그리고 비밀번호를 표시하려면 비밀번호를 표시하려면 암호의 소유자 만 볼 수 있도록 애플리케이션을 설계해야합니다. 그렇지 않으면 큰 시간이 크고 XSS가 가장 적습니다. 당신의 걱정!

html 정화기가 가져갑니다 HTML 입력으로, 생성됩니다 HTML 출력으로. 그 목적은 사용자가 약간 태그, 속성 및 값은 다른 사람을 필터링합니다. 이것은 화이트리스트를 사용하여 스크립트가 포함될 수있는 데이터를 방지합니다. 따라서 이것은 wysiwyg 편집기와 같은 것에 유용합니다.

반면에 사용자 이름과 암호는 그렇지 않습니다 HTML. 그것들입니다 일반 텍스트, 따라서 HTML 청정기는 옵션이 아닙니다. 여기서 HTML 청정기를 사용하려고하면 데이터가 손상되거나 XSS 공격을 허용합니다.

예를 들어, 변경되지 않은 것을 통해 다음을 통해 일부 요소에 속성 값으로 삽입 될 때 XSS 문제가 발생할 수 있습니다.

" onclick="javascript:alert()" href="

또는 누군가가 암호에 특수 기호를 사용하려고 시도한 경우 다음을 입력 한 경우 :

<password

그런 다음 암호가 비어 있고 추측하기가 훨씬 쉬워집니다.

대신 텍스트를 인코딩해야합니다. 필요한 인코딩은 컨텍스트에 따라 다르지만 사용할 수 있습니다. htmlentities 이 값을 출력 할 때 규칙 #0 그리고 규칙 #1, 에서 OWASP XSS 예방 치트 시트

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