AngularJS ইউআরএলগুলিকে এক্সটেনশন পৃষ্ঠায় "অনিরাপদ:" এ পরিবর্তন করে


186

আমি অ্যাপ্লিকেশনগুলির একটি তালিকা সহ কৌণিক ব্যবহার করার চেষ্টা করছি, এবং প্রতিটিই আরও বিশদে একটি অ্যাপ্লিকেশন দেখার জন্য একটি লিঙ্ক ( apps/app.id):

<a id="{{app.id}}" href="apps/{{app.id}}" >{{app.name}}</a>

যতবার আমি এই লিঙ্কগুলির একটিতে ক্লিক করি, ক্রোম হিসাবে URL টি দেখায়

unsafe:chrome-extension://kpbipnfncdpgejhmdneaagc.../apps/app.id

কোথা unsafe:থেকে আসে?


1
মনে রাখবেন যে আপনার ng-hrefএই ক্ষেত্রেটি কেবল বিচারের চেয়ে ব্যবহার করা উচিত href: docs.angularjs.org/api/ng/directive/ngHref
hartz89

আমি কেবল একটি নিয়ামক পদ্ধতি ব্যবহার করিfunction gotoURL(url) { $window.location.href = url; }
টড হ্যালে

উত্তর:


362

আপনাকে নিয়মিত অভিব্যক্তি ব্যবহার করে অ্যাংুলারের শ্বেত তালিকাতে স্পষ্টভাবে ইউআরএল প্রোটোকল যুক্ত করতে হবে। শুধু http, https, ftpএবং mailtoডিফল্ট ভাবে সক্ষম করা আছে। কৌণিক unsafe:একটি প্রোটোকল যেমন ব্যবহার করার সাথে একটি শ্বেত তালিকাভুক্ত ইউআরএল উপসর্গ করবে chrome-extension:

chrome-extension:প্রোটোকলটি সাদা করার জন্য একটি ভাল জায়গাটি আপনার মডিউলটির কনফিগার ব্লকে থাকবে:

var app = angular.module( 'myApp', [] )
.config( [
    '$compileProvider',
    function( $compileProvider )
    {   
        $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|chrome-extension):/);
        // Angular before v1.2 uses $compileProvider.urlSanitizationWhitelist(...)
    }
]);

একই পদ্ধতি প্রযোজ্য যখন আপনি যেমন প্রোটোকল ব্যবহার করতে হবে file:এবং tel:

আরও তথ্যের জন্য অনুগ্রহ করে AngularJS $ compilaProvider API ডকুমেন্টেশন দেখুন।


11
কৌণিক 1.2 তে পদ্ধতির নামটি হয়ে যায়$compileProvider.aHrefSanitizationWhitelist
মার্ট

6
ডিফল্ট imgSrcSanitizationWhitelist অ্যাঙ্গুলার 1.2-আরসি 2 হ'ল /^\s*(https?|ftp|file):|data:image\//, একটি ক্রোম প্যাকেজড অ্যাপ্লিকেশনটির জন্য স্থানীয় ফাইল সিস্টেমটি অ্যাক্সেস করার জন্য রিজেক্সের |filesystem:chrome-extension:শেষে যুক্ত করা উচিত।
হেনিং

29
নোট করুন যে কৌণিক 1.2 তে আসলে দুটি পদ্ধতি রয়েছে - একটি লিঙ্কগুলির জন্য (aHrefSanitizationWhitelist) এবং একটি চিত্রের জন্য (imgSrcSanitizationWhitelist)। এটি আমাকে কিছুক্ষণ আটকে রেখেছিল।
mdierker

1
একটি Chrome প্যাকেজড অ্যাপ্লিকেশনটির জন্য আপনাকে |blob:chrome-extension:শেষের দিকে যুক্ত করতে হবে।
adam8810

1
নোট করুন ফাইল প্রোটোকলটি ব্লব প্রোটোকল থেকে পৃথক: $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|file|blob|ftp|mailto|chrome-extension):/);
আর্নাড লেদার

56

ইমেজগুলির ক্ষেত্রে কারও যদি এই সমস্যা থাকে তবে:

app.config(['$compileProvider', function ($compileProvider) {
    $compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|local|data|chrome-extension):/);
}]);

আমি এইচটিএমএল 2 ক্যানভাসের সাথে ক্যাপচার করছি এমন চিত্রের স্ক্রিন শটগুলিকে সাদা করার জন্য নিয়মিত অভিব্যক্তিটি ব্যবহার করার চেষ্টা করেছি, এখন কোনও ত্রুটি নেই যা নিরাপদ বলেছে: ডেটা; তবে চিত্রটি ধরা পড়ছে না। কোন নিয়মিত ভাবটি আমি ব্যবহার করব? বেস / ইউআরএল হিসাবে আমি একটি চিত্র / পিএনজি ক্যাপচার করছি। এখন এইচটিএমএল দেখে মনে হচ্ছে: <img ng-src = "data :," class = "img-প্রতিক্রিয়াশীল" src = "ডেটা:,"> আসল বেস 64 url ​​এর পরিবর্তে
hakuna

6

আপনার যদি কেবল মেলের প্রয়োজন হয়, টেলি এবং এসএমএস এটি ব্যবহার করুন:

app.config(['$compileProvider', function ($compileProvider) {
    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|file|sms|tel):/);
}]);

2

Google Chrome এর সহযোগিতা করার জন্য এর এক্সটেনশনগুলির প্রয়োজন Content Security Policy (CSP)

এর প্রয়োজনীয়তাগুলি পূরণ করতে আপনাকে আপনার এক্সটেনশনটি পরিবর্তন করতে হবে CSP

https://developer.chrome.com/extensions/contentSecurityPolicy.html

https://developer.mozilla.org/en-US/docs/Security/CSP

এছাড়াও, কৌণিক জেএসের একটি ngCspনির্দেশনা রয়েছে যা আপনার ব্যবহার করা উচিত।

http://docs.angularjs.org/api/ng.directive:ngCsp


আমার কাছে ইতিমধ্যে সেই পৃষ্ঠার << এইচটিএমএল এনজি-অ্যাপ = "মাই অ্যাপ" এনজি-সিএসপি> 'এর জন্য এনজিসিএসপি নির্দেশনা রয়েছে। এটি আমার ম্যানিফেস্টের সিএসপি: আমার কি সিএসপি "content_security_policy": "script-src 'self' https://ssl.google-analytics.com; object-src 'self'", পরিবর্তন করতে হবে?
ebi

2
<a href="{{applicant.resume}}" download> download resume</a>


var app = angular.module("myApp", []);

    app.config(['$compileProvider', function($compileProvider) {
         $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|local|data|chrome-extension):/);
        $compileProvider.imgSrcSanitizationWhitelist(/^\s*(https?|local|data|chrome-extension):/);

        }]);

2

আপনি এর পদ্ধতি Angular 2+ব্যবহার করতে পারেন ।DomSanitizerbypassSecurityTrustResourceUrl

import {DomSanitizer} from '@angular/platform-browser';

class ExampleComponent {
    sanitizedURL : SafeResourceUrl;

    constructor(
        private sanitizer: DomSanitizer){
        this.sanitizedURL = this.sanitizer.bypassSecurityTrustResourceUrl(); 
    }
}

হাই, আপনি কি এর জন্য আরও বিস্তৃত উদাহরণ প্রদান করতে পারেন?
জয়েশ চৌধারি

হাই @ জয়েশ চৌধুরী, আপনি কি দয়া করে আমাকে বিশেষভাবে যা খুঁজছেন তা আমাকে জানান এবং আমি আপনাকে আরও ভালভাবে সহায়তা করতে সক্ষম হতে পারি।
রমন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.