2011-07-28 3 views
0

RoR 3은 ERB 템플릿을 자동으로 정리합니다 (올바르게 완료된 경우). 그러나 응용 프로그램 계층에만 RoR을 사용하고 프레젠테이션에는 javascript를 사용하는 작은 프로젝트가 있습니다. 그래서, 전형적인 요청은 레일스 라우트에 대한 ajax 호출이며 반환 된 JSON을 렌더링합니다. 문제는 js를 삽입하고, 제목이 <script>alert('hello')</script> 인 새 제품을 만들고 다음 요청에서 그대로 반환되며 브라우저가 행복하게 스크립트를 해석 할 수 있다는 것입니다. 레일에서 JSON을 살균하는 가장 좋은 방법

  1. 에 가장이 게시물에 입력을 살균인가?
  2. 서버에서 json 응답을 삭제 하시겠습니까? (override to_json?)
  3. 클라이언트에서 json 응답을 삭제 하시겠습니까?

모든 입력에 감사드립니다.

답변

1

페이지에 데이터를 추가 할 때 컨텐츠 클라이언트 측에서 HTML 엔티티를 인코딩해야합니다.

질문은 다른 제품 필드에도 의도적으로 인코딩되는 링크 또는 단락 태그와 같은 마크 업이 포함되어 있습니까? 이 경우에 페이지의 HTML로 json 응답의 일부를 렌더링하려는 경우 신제품이 생성 될 시점에서 입력 내용을 살균해야하며 허용 된 HTML 태그를 특정 부분 집합을 제거한 다음 속성을 제거합니다. sanitize gem처럼이 프로세스를 자동화하는 라이브러리가 있습니다.

+0

사려 깊은 반응에 감사드립니다. 사용자가 제공 한 마크 업을 포함 할 수있는 모델 속성이 있습니다. 그래서 관찰자가 before_validation을 제거하기로 결정했습니다. –

+0

sanitize gem은 훌륭하지만 JRuby와 같은 대안 환경에서는 작성자가 지원하지 않기 때문에 빌드되지 않으므로보다 자세한 해결책이 더 좋을 것입니다. – rcd

관련 문제