2016-10-27 6 views
2

는 예를 LINK_TO 다음 고려 HREF 주어 모델 속성으로 LINK_TO 사용 : 레일 : 방지 XSS

link_to "Personal Website", @user.website

어떻게 XSS 공격으로부터 보호 할 수 있습니다. 사용자 테이블이 외부 DB에 있으므로 신뢰할 수 없습니다. 내가 sanitize 및 H를 사용하여 다른 접근 방식을 시도했지만 javascript:alert('XSS') 내 로컬 DB 사용자 웹 사이트에서 바꿀 때, 자바 스크립트는 링크를 클릭하면 여전히 실행되고 있습니다. 사전에

감사합니다,

답변

0

당신은 제거 할 수 있습니다 "자바 스크립트 :"컨트롤러이다. 그건 못생긴지만 작동, 일부주의 사항 (브라우저는 정확히 그들이 "자바 스크립트 :"로 받아 들일 수 있습니다 굉장합니다). 이것은 매우 강력한 통제가 아닙니다.

"http : //"(또는 "https : //")를 링크 href에 정적으로 추가하고 사용자 입력에서 제거 할 수 있습니다. "javascript :"는 href의 첫 문자에있는 경우에만 작동하며 시작 부분에 정적으로 http : //를 추가하면 XSS가 완화됩니다.

인라인 자바 스크립트가 실행되지 않도록하려면 Content-Security-Policyheader을 사용할 수도 있습니다. 이는 코드를 구조화하는 방법에 영향을 미치며 모든 브라우저에서 지원되지는 않지만 인 경우 우수한 컨트롤입니다.

항상 그렇듯이 다중 방어 층을 구현하면 (위의 여러 항목) 응용 프로그램이 공격에 대해보다 강력하고 안전 해집니다.

+0

답변 해 주셔서 감사합니다. –

+0

제 작품이 처음 제안되었습니다. 나는 brakeman을 사용하고 있으며'link_to href'에서'안전하지 않은 모델 속성에 대한 경고입니다. 그래서 필자는 필자가 필요한 컨트롤을 처리하는 도우미에서'get_user_url' 메서드를 사용했습니다. Brakeman은 더 이상 XSS 공격에 대해 경고하지 않으며 적어도 "javascript :"는 실행되지 않습니다. 그러나 당신이 말했듯이 그것은 약간 추한 것입니다. 그래서 그것을하는 더 우아한 레일 방법이있을 거라고 생각했습니다. 'Content-Security-Policy' 제안에 대해 btw에게 감사드립니다. 나는 HTTP 응답 헤더에 대해 더 많은 것을 파 내기 위해 시간을 보냈다. 그것은 유익했다. –