2011-02-11 2 views
4

줄무늬 프레임 워크를 사용하여 웹 응용 프로그램을 구현하고 있습니다. 모든 종류의 공격을 피하기 위해 텍스트는 DB에 위생 처리 된 상태로 저장되며 위생 처리에는 HTML 엔터티의 인코딩이 포함됩니다.줄무늬 프레임 워크 : 양식에서 문자열 이스케이프를 어떻게 비활성화 할 수 있습니까?

줄무늬가있는 양식을 만들 때 내 문제가 나타납니다. 양식이 비어있는 상태에서 시작되면 모든 것이 정상입니다. 그러나 사용자가 이전에 입력 한 내용이이 양식이고 DB에서 기존 값을 가져 와서 작업 빈에 설정 한 다음 줄무늬 양식 태그로 표시하면 줄무늬가 다시 이스케이프 처리됩니다. 그 결과 내 문자열이 두 번 이스케이프됩니다.

어쨌든 나는 내가하고있는 일을 알고 스트라이프에게 말할 수 있습니까? 그리고 당신에게 줄 문자열이 이미 도망 쳤습니까?

+0

그래서 비화되지 않은 문자열을 DB에 저장하는 것은 아니오입니까? : – yihtserns

답변

2

가장 좋은 해결책은 문제가있는 필드에 줄무늬를 사용하지 않는 것입니다. 당신의 JSP 당신이 예를 들어, 교체하는 경우 :

<stripes:textarea name="userEntryComment"/> 

Thenexcept 줄무늬

<textarea name="userEntryComment">${actionBean.userEntryComment}</textarea> 

와 두 번째 버전의 HTML을 생성하는 데 전혀 호출되지 않습니다. 또한이 경우 < c : out > 태그를 사용하지 않기 때문에 문자열이 다시 이스케이프되지 않습니다.

0

HTML 엔터티의 인코딩 및 디코딩은 Stripes에서 처리되므로 실제로 인코딩 된 HTML 엔터티를 데이터베이스에 저장할 필요가 없습니다. 살인 프로세스에서 HTML 엔티티의 인코딩을 제거하면 Stripes가 데이터를 안전하게 처리합니다.

또 다른 요점이 있습니다. 모델 데이터 (MVC model!)를 HTML과 같은 프리젠 테이션 형식으로 저장하는 것은 나쁜 습관이라고 생각할 수 있습니다. 물론 HTML 엔티티는 HTML 형식의 데이터이기도합니다. 그들은 검색, 텍스트 전자 메일 보내기 등과 같은 모든 종류의 다른 작업을 할 때 데이터 사용을 제한하거나 방해합니다.

+0

인코딩 된 HTML을 저장하는 것에 대한 설명은 정확하지만 인코딩 된 HTML을 DB에 저장하는 것이 HTML/js 삽입 및 XSS에 대한 완벽한 보호를 보장하는 가장 좋은 방법이므로 출력을 이스케이프 처리하는 것을 기억하지 않아도됩니다. 어쨌든, 내 질문에 대답하지 않습니다. – LordOfThePigs

+0

허용되는 문자를 제한하는 것이 더 안전 할 것입니다. 어떤 식 으로든이 또한 관심을 가질 수 있습니다 : http://code.google.com/p/stripes-xss/ – Kdeveloper

관련 문제