2016-09-24 10 views
12

मैं <div [innerHTML]="body"></div> का उपयोग अपने टेम्पलेट को नहीं छोड़ा जाएगा एचटीएमएल पारित करने के लिए, और जब मैं विशेषता id, कोणीय फेंक साथ bodydiv को पारित:कोणीय 2: एचटीएमएल को स्वच्छ करने से डीवी आईडी के साथ कुछ सामग्री छीन ली गई - यह बग या फीचर है?

चेतावनी: प्रतिबंध लगाया एचटीएमएल कुछ सामग्री छीन (http://g.co/ng/security#xss देखें)। चेतावनी: एचटीएमएल को स्वच्छ करने से कुछ सामग्री छीन ली गई है (http://g.co/ng/security#xss देखें)। चेतावनी: एचटीएमएल को स्वच्छ करने से कुछ सामग्री छीन ली गई है (http://g.co/ng/security#xss देखें)।

See. plunker

तो यह इस कारण है कि कहते हैं? div में खतरनाक id क्या हो सकता है? क्या यह बग हो सकता है?

उत्तर

4

ऐसा इसलिए है क्योंकि आईडी विशेषता सुरक्षित नहीं है।

यह मेरा जवाब नहीं है बल्कि यह आपके प्रश्न का उत्तर देगा: https://security.stackexchange.com/questions/88973/why-do-id-attributes-need-stricter-validation


id और name के लिए, इन विशेषताओं अक्सर डोम में संदर्भ बिंदु के रूप में उपयोग किया जाता है।

एक हमलावर इन संदर्भ बिंदु धोखा दे सकते हैं, तो वह हो रही है और तैयार किया गया है के अलावा अन्य स्थानों, जो संदर्भ है कि प्रयोग किया जाता है पर निर्भर करता है खतरनाक हो सकता है से मूल्य निर्धारित करने में सक्षम चाल मौजूदा स्क्रिप्ट हो सकता है। मुझ से


नोट: नाम विशेषता के बारे में अपने पद की वार्ता के बाकी है, लेकिन आप यह सब के पीछे विचार यह मिल जाएगा, तो आप क्या ऊपर


यह भी है के द्वारा पहले से ही नहीं है HTML फॉर्म पर लागू होता है जहां name नाम/मान जोड़ी की पहचान करने के लिए उपयोग किया जाता है। उदाहरण के लिए, यदि कोई वेबसाइट आउटपुट होने पर किसी विशेष फॉर्म फ़ील्ड को एन्कोड नहीं करती है, लेकिन चूंकि फॉर्म फ़ील्ड सर्वर उत्पन्न होता है और फॉर्म को टोकन के उपयोग से सीएसआरएफ के खिलाफ सुरक्षित किया जाता है, तो इसे सामान्य माध्यमों से शोषित नहीं किया जा सकता है। हालांकि, एक हमलावर उपयोगकर्ता को name में उपयोग किए जाने वाले पैरामीटर वाले यूआरएल पर जाने के लिए लुभाने में सक्षम हो सकता है, जिसमें फॉर्म जमा करने के लिए एक्सएसएस पेलोड होता है।

उदासामान्य उपयोग:

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

जो एक रूप

<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> 

renders और फिर

Thank you for buying from Bob's Supplies. 

हालांकि के रूप में उत्पादन हो जाता है, एक हमलावर तो जैसे उपयोगकर्ता के लिए एक लिंक भेज सकते हैं:

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

जैसा कि आवेदन है सही ढंग से इस बिंदु पर एचटीएमएल एन्कोडिंग यह रूप में

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> 

यह तो हो जाता है उत्पादन प्रपत्र प्रस्तुत करने के बाद से यह पेज एचटीएमएल shop_name पैरामीटर एन्कोड नहीं करता, क्योंकि यह विश्वसनीय है और अनुप्रयोग फ्रेमवर्क हमेशा डुप्लिकेट के मामले में पहला मान लेता है। बहुत प्रतिस्पर्धा हुई, लेकिन यह पहली बात थी जो बिंदु को प्रदर्शित करने के लिए मेरे सिर में गिर गई। http://stackoverflow.com/:

19

सरल समाधान की तरह

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); 
    } 
} 

पाइप लिखने के लिए अपने html फ़ाइल में जोड़ने की तरह

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

ढेर जोड़ने एक साथ इस सवाल से कार्ल से जवाब के साथ है प्रश्न/3 9 007130/द-पाइप-नहीं-पाया-कोणीय 2-कस्टम-पाइप Sanitizer – sanyooh

+0

@Sanyooh के साथ इस समस्या के लिए एक अच्छा फिक्स है यह अच्छी तरह से sanatizing काम करता है, लेकिन मुझे '' अपरिभाषित 'मेरे' आंतरिक HTML] 'सामग्री प्रदर्शित है। '

' – fidev

+0

सुरक्षित एचटीएमएल? जहां इसे –

संबंधित मुद्दे