2009-09-29 5 views
5

다음과 같은 작업을 수행하는 방법에 대한 답변을 온라인에서 찾을 수 없습니다.레일 - h()를 사용하여 HTML을 이스케이프 처리하고 특정 태그를 제외하십시오.

는이 전 다음과 같은 포함 된 문자열 있다고 가정 해 봅시다 :

my_string = "안녕하세요을, 나는 문자열입니다." (미리보기 창에서 "strong"및 "i"태그를 표시하는 대신 실제로 BOLD 및 ITALIC 서식이 있음을 알 수 있습니다)

이제 html_escape()를 사용하여이 보안을 설정하고 싶습니다. 또는 h()) 메소드/함수. 그래서 사용자가 자바 스크립트 및/또는 스타일 시트를 삽입하지 못하도록하고 싶습니다. 그러나 "Hello"라는 단어는 굵게 표시하고 "string"은 기울임 꼴로 표시하고 싶습니다.

필자가 볼 수있는 한, h() 메서드는 텍스트 자체 이외에 추가 인수를 취하지 않습니다.

모든 HTML 태그 대신 특정 HTML 태그 만 이스케이프 처리 할 수있는 방법이 있습니까? 화이트 또는 블랙 리스팅 태그와 비슷합니까?

이 나는 ​​것 말을 시도하고 무엇을, 어떻게 보이는지 예 :

시간 (my_string : = 제외> [: 강한 : I]) # => 기본적으로 그렇게 탈출 모든 것이지만 "강한"태그와 "i"태그를 그대로두면 이스케이프 처리하지 않습니다.

내가 수행 할 수있는 방법이나 방법이 있습니까?

미리 감사드립니다.

답변

3

특정 태그 제외는 실제로 매우 어려운 문제입니다. 특히 script 태그는 very many different ways에 삽입 할 수 있습니다. 모두 감지하는 것은 매우 까다 롭습니다.

가능한 한 직접 구현하지 마십시오.

2

실제로 HTML을 허용하는 대신 RedCloth 또는 BlueCloth을 사용하셨습니까? 이 메소드는 꽤 많은 형식 지정 옵션을 제공하며 사용자를 위해 구문 분석을 관리합니다.

편집 1 :this message RedCloth를 사용하여 HTML을 제거하는 방법을 탐색 할 때 어떤 용도로 사용되었을 수 있습니다. 또한 this page은 버전 2.0.5에서 HTML을 제거하는 방법을 보여줍니다. 최신 정보를 찾을 수없는 것 같지만 forum post은 취약점을 발견했습니다. 2006 년 이후로 수정 되었기를 바라지 만 RedCloth 설명서 또는 설명서를 찾을 수없는 것 같습니다 ...

+0

RedCloth는 훌륭하지만 html 태그를 제거하지 않습니다. 을 삽입 할 수 있으며 이스케이프 처리되지 않습니다. BlueCloth가 HTML을 제거하는 방법에 대해 잘 모르겠습니다. 나는 전에 그것을 사용하지 않았다. – zgchurch

2

white list 플러그인 또는 modified 버전을 사용하십시오. 그것은 대단하다! Sanitize도 보일 수 있습니다 (더 나은 것 같지만 한번도 시도하지 않았습니다).

1

두 번째로 HTML 태그 제거를 위해 Sanitize를 사용합니다. 그것은 정말 잘 작동합니다. 기본적으로 모든 항목이 제거되며 허용 할 태그에 대한 허용 목록을 지정할 수 있습니다.

0

XSS 공격을 예방하는 것은 매우 중요합니다. hrnt 's를 따르고 모호한 브라우저 단점으로 인해 가능한 것보다 더 많은 공격이있을 것이라고 생각하십시오.html_escape가 일들을 아주 단단히 고정 시키지만, 나는 이런 유형의 것을 위해 자체 개발 한 것을 사용하는 것은 실수라고 생각합니다. 어떤 종류의 견고성 보장을 위해서는 더 많은 눈알과 동료 리뷰가 필요합니다.

나는 지금 sanitizeXssTerminate을 평가하는 과정에 있습니다. 나는 xss_terminate 접근법을 선호한다. 모델 레벨에서의 스크러빙은 모든 사용자 입력이 ActiveRecord를 통과하는 정규 레일 애플리케이션에서 매우 안정적 일 것이지만, Nokogiri과 특히 Loofah은 조금 더 분명하고,보다 적극적으로 유지 관리되며, 확실히 볼 수있다. 더 유연하고 Ruby-ish.

업데이트 난 그냥 전혀 필요하지 않고, ActsAsTextiled의 포크는 Santize 안전하고 RedCloth 출력의 정형식을 보장하기 위해 (최근에 업데이트 된 방법에 의해 노코 기리 사용) 사용하는 ActsAsSanitiled라는 구현했습니다 템플릿의 도우미.

관련 문제