2016-09-24 8 views
12

은 내 템플릿에 이스케이프 HTML을 전달하는 <div [innerHTML]="body"></div>를 사용하고, 나는 속성 id, 각도 던져으로 bodydiv에 통과 할 때 :각도 2 : divid를 사용하여 일부 HTML 콘텐츠를 삭제했습니다. 버그 또는 기능입니까?

경고 : 살균 HTML은 (http://g.co/ng/security#xss 참조) 일부 콘텐츠를 제거. 경고 : HTML을 삭제하면 일부 콘텐츠가 삭제됩니다 (http://g.co/ng/security#xss 참조). 경고 : HTML을 삭제하면 일부 콘텐츠가 삭제됩니다 (http://g.co/ng/security#xss 참조).

See. plunker

그래서 왜이 말한다? 무슨 iddiv에 위험 할 수 있습니까? 이 버그?

답변

4

id 속성이 안전하지 않기 때문입니다.

이 내 대답은 아니지만 그것은 귀하의 질문에 대답합니다 : https://security.stackexchange.com/questions/88973/why-do-id-attributes-need-stricter-validation


idname, 이러한 속성은 자주 DOM의 기준점으로 사용됩니다.

공격자가 이러한 참조 지점을 스푸핑 할 수 있으면 기존 스크립트를 사용하여 설계된 이외의 곳에서 값을 가져오고 설정하는 것을 속일 수 있습니다.이 경우 사용되는 컨텍스트에 따라 위험 할 수 있습니다..


내에서 참고 :


이 이상 무엇을 이미하지 않으면 name 속성에 대한 자신의 게시물 회담의 나머지 부분,하지만 당신은이 모든 뒤에 아이디어를 얻을 수 있습니다 HTML 양식에 적용되며 name은 이름/값 쌍을 식별하는 데 사용됩니다. 예를 들어 웹 사이트가 출력 될 때 특정 양식 필드를 인코딩하지 않고 양식 필드가 서버로 생성되고 양식이 토큰을 사용하여 CSRF로부터 보호되므로 정상적인 수단으로 악용 될 수 없습니다. 그러나 공격자는 사용자가 name에 사용되는 매개 변수를 사용하여 URL을 방문하도록 유인 할 수 있으며 양식 제출시 실행할 XSS 페이로드를 포함합니다.

일반 사용 : 형태

<form> 

<input type="hidden" name="watch" value="1" /> 
<input type="hidden" name="shop_name" value="Bob's Supplies" /> 
<input type="hidden" name="anti-csrf" value="asdjasodhoai" /> 

<input type="submit" value="Click here to buy" /> 

</form> 

를 렌더링 그리고

그러나
Thank you for buying from Bob's Supplies. 

으로 출력을 얻을 수

https://example.com/product?item_name=watch&qty=1 

는, 공격자는과 같이 사용자에게 링크를 보낼 수 있습니다 :

https://example.com/product?item_name=shop_name&qty=<script>alert('xss')</script> 

응용 프로그램이 이 페이지는 HTML 응용 프로그램 프레임 워크 항상 신뢰할 수 있기 때문에 shop_name 매개 변수를 인코딩하지 않기 때문에 제대로이 시점에서 HTML 인코딩은

Thank you for buying from <script>alert('xss')</script>. 

<form> 

<input type="hidden" name="shop_name" value="&lt;script&gt;alert(&#039;xss&#039;)&lt;/script&gt;" /> 
<input type="hidden" name="shop_name" value="Bob's Supplies" /> 
<input type="hidden" name="anti-csrf" value="asdjasodhoai" /> 

<input type="submit" value="Click here to buy" /> 

</form> 

이 다음 얻는다 출력으로 폼을 렌더링 중복의 경우 첫 번째 값을가집니다. 매우 고안되었지만 요점을 설명하기 위해 내 머리 속에 들어간 것은 처음이었습니다. http://stackoverflow.com/ :

19

간단한 솔루션은 함께이 질문에서 칼의 대답

<td *ngIf="i>0" [innerHTML]="entry.attributes[i] | sanitizeHtml"></td> 
+1

같은 파일을 추가하려면 html 파일에 추가

import { Pipe, PipeTransform } from "@angular/core"; import { DomSanitizer, SafeHtml } from '@angular/platform-browser'; @Pipe({ name: 'sanitizeHtml' }) export class SanitizeHtmlPipe implements PipeTransform { constructor(private _sanitizer:DomSanitizer) { } transform(v:string):SafeHtml { return this._sanitizer.bypassSecurityTrustHtml(v); } } 

처럼 파이프를 작성하는 것입니다 질문/39007130/pipe-could-be-found-angular2-custom-pipe 살균제로이 문제에 대한 좋은 해결책 – sanyooh

+0

@sanyooh 이것은 잘 살균 작용을하지만, '정의되지 않은' innerHTML]'내용이 표시됩니다. '

' – fidev

+0

SafeHtml? –