로그인 한 사용자가 WYSIWYG 편집기를 사용하여 페이지에 기사를 게시 할 권한이있는 엔터프라이즈 수준의 응용 프로그램이 있습니다. (이 응용 프로그램은 웹 사이트 빌더로 간주 할 수 있습니다.)Laravel을 사용하여 WYSIWYG 편집기를 허용하고 XSS 공격을 비활성화하려면 어떻게합니까?
모든 것이 제대로 작동하지만 문제는 있습니다.
WYSIWYG 에디터를 post HTML 포함 된 기사, Laravel이 좋아하지 않는 일부 지역화 된 문자열 문자, Laravel의
alpha_num
검사를 통과 할 수 있도록. (그러므로 우리는 유효성 검사에 사용하지 마십시오.)우리는 그들이 WYSIWYG 편집기를 사용하여 몇 가지 기본 스타일을 수행 할 수 있기 때문에 문자 같은
<
,"
는,>
, 그래서htmlspecialchars()
이 옵션을 선택하지 않습니다 허용 할 필요가 울리는 동안/위생적인 가치, 왜냐하면<br>
님의 해로운 일들이 있기 때문입니다.사용자가
<script type="text/javascript>alert('Hello');</script>
또는</div></div></div><div style="width: 100%, height: 100% z-index: 999999">
등의 게시물을 올릴 수 있습니다. 보안 위험이 매우 큽니다. 그러나 실제로는 아무 것도 살려 내지 못합니다. 사용자는 여전히<s<!---->cript>
을 작성하고 수표를 통과 할 수 있습니다.
즉, 간단히 말해서 내장 된 Laravel 및 PHP 기능을 사용할 수 없습니다. WYSIWYG 편집기는 음성 응용 프로그램의 대다수 영역에서 자주 사용되기 때문에 비활성화 할 수 없습니다.
이것을 피하는 가장 좋은 방법은 무엇입니까?
나는 alpha_num_localised_characters_plus_allowed_html_tags
과 같은 이름으로 불려질 사용자 정의 규칙을 alpha_num
위에 만들고이 규칙을 WYSIWYG 편집기가 포함 된 모든 입력에 추가하려고합니다.
좋은 방법입니까? 더 좋은 대안이 있습니까? 그런 문제에 어떻게 대처합니까?
참고 : 우리는 이미 거대한 크기의 응용 프로그램을 개발 했으므로, 가장 빠르고 유지 보수가 용이 한 솔루션에 의존 할 것입니다.
조금만 더 만들고 싶습니다. 현재 Laravel에 의해 검증되지 않은 입력 (예 : email | alpha | alpha_dash | custom_validations)은 HTMLPurifier :: purify()에 의해 유효성이 검사됩니다. 더 빠른 방법이 있으면 알려주세요! – Aristona
htmlpurifier를 사용하여 "유효성을 검사"하지 않습니다. 대신 입력을 "안전"하도록 사용하십시오. 필드가 필요한 경우 laravel로 수행 할 수있는 유일한 유효성 검사는 "필수"입니다. - 자세한 내용은 내 대답을 참조하십시오 –