2013-06-26 2 views
6

로그인 한 사용자가 WYSIWYG 편집기를 사용하여 페이지에 기사를 게시 할 권한이있는 엔터프라이즈 수준의 응용 프로그램이 있습니다. (이 응용 프로그램은 웹 사이트 빌더로 간주 할 수 있습니다.)Laravel을 사용하여 WYSIWYG 편집기를 허용하고 XSS 공격을 비활성화하려면 어떻게합니까?

모든 것이 제대로 작동하지만 문제는 있습니다.

  1. WYSIWYG 에디터를 post HTML 포함 된 기사, Laravel이 좋아하지 않는 일부 지역화 된 문자열 문자, Laravel의 alpha_num 검사를 통과 할 수 있도록. (그러므로 우리는 유효성 검사에 사용하지 마십시오.)

  2. 우리는 그들이 WYSIWYG 편집기를 사용하여 몇 가지 기본 스타일을 수행 할 수 있기 때문에 문자 같은 <, "는, >, 그래서 htmlspecialchars()이 옵션을 선택하지 않습니다 허용 할 필요가 울리는 동안/위생적인 ​​가치, 왜냐하면 <br> 님의 해로운 일들이 있기 때문입니다.

  3. 사용자가 <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 편집기가 포함 된 모든 입력에 추가하려고합니다.

좋은 방법입니까? 더 좋은 대안이 있습니까? 그런 문제에 어떻게 대처합니까?

참고 : 우리는 이미 거대한 크기의 응용 프로그램을 개발 했으므로, 가장 빠르고 유지 보수가 용이 한 솔루션에 의존 할 것입니다.

+0

조금만 더 만들고 싶습니다. 현재 Laravel에 의해 검증되지 않은 입력 (예 : email | alpha | alpha_dash | custom_validations)은 HTMLPurifier :: purify()에 의해 유효성이 검사됩니다. 더 빠른 방법이 있으면 알려주세요! – Aristona

+0

htmlpurifier를 사용하여 "유효성을 검사"하지 않습니다. 대신 입력을 "안전"하도록 사용하십시오. 필드가 필요한 경우 laravel로 수행 할 수있는 유일한 유효성 검사는 "필수"입니다. - 자세한 내용은 내 대답을 참조하십시오 –

답변

2

사용자가 특정 작업을 수행 할 수 있도록 BBCode 또는 Markdown과 유사한 태그 시스템을 사용할 수 있습니다. 이 방법을 사용하면 모든 종류의 악의적 인 스크립트에 대해 입력을 살균 할 수 있으며 사용자 컨텐트를 표시 할 때 렉서와 XSS 보호 만 사용하면됩니다.

편집 :

+0

좋아,이 느낌이 좋아. 편집기는 BBCode를 게시하고 WYSIWYG도 동시에 제공합니까? 그럼 당연하지. 고마워. 지금부터 내 프로젝트에 포함시킬 것입니다! 이 솔루션은 제가 찾고있는 솔루션입니다. – Aristona

-1

나는 이것이 당신에게 얼마나 유용한 지 알지 못하지만, 빠르고 쉬운 해결책은 httpOnly 쿠키를 사용하는 것입니다. 그것은 쿠키가 javascript에 액세스 할 수 없기 때문에 악의적 인 자바 스크립트 삽입을 통한 XSS 공격을 해결합니다. 일반적인 쿠키에는 민감한 데이터가 아닌 httpOnly 쿠키에 senstive 데이터를 넣으려고 할 수 있습니다. 다음을 참조하십시오 : http://www.codinghorror.com/blog/2008/08/protecting-your-cookies-httponly.html

+0

쿠키에 대해 신경 쓰지 않아요. 자바 스크립트는 어쨌든 완전히 비활성화되어야합니다. – Aristona

1

strip_tags을 통해 모든 것을 실행할 수 있으며 최소 태그 만 허용 할 수 있습니까?

당신은 또한 당신에게 CSS 제어를 포함하여 더 많은 옵션을 제공해야하는 html purifier보고 할 수 있습니다

내가 일반적으로 할 것은 WYSIWYG 내용의 두 복사본 저장입니다 :

  1. 원래 필터링되지 않은 내용
  2. 필터링 된 내용

이렇게하면 원본 콘텐츠를 다시 처리 할 수 ​​있습니다. tal은 삭제되었으며 편집시 사용자에게 원래 HTML을 보여줍니다.분명히 사이트에 표시되는 모든 위치에서 필터링 된 내용을 표시합니다.

0

당신은 또한 블레이드 템플릿 물건 소독해야 할 수도 있습니다 Laravel를 사용 : 당신은 BBCode plugin와 함께, 귀하의 WYSIWYG 편집기로 CKEditor를 사용할 수 있습니다, 내가 무엇을 의미하는지 참조하십시오. 사용자가 {{{phpInfo()}}}와 같은 항목에 들어가는 것을 원하지 않습니다.

WYSIWYG 편집기를 작성하려면 사용자에게 어느 정도의 신뢰가 있어야합니다. 사용자를 신뢰할 수 없다면 사용자 지정 태그를 사용하여 앞서 언급 한 내용이 가장 좋습니다.

관련 문제