javascript - circumvent meaning in bengali




একই মূল পলিসি circumvent করার উপায় (8)

document.domain ডোমেন পদ্ধতি

  • পদ্ধতির ধরন: আইফ্রেম

নোট করুন যে এটি একটি আইফ্রেম পদ্ধতি যা বর্তমান ডোমেনের প্রত্যয়কে document.domain এর মান নির্ধারণ করে। যদি এটি হয়, ছোট ডোমেন পরবর্তী উৎপাদনের চেকগুলির জন্য ব্যবহৃত হয়। উদাহরণস্বরূপ, http://store.company.com/dir/other.html এ দস্তাবেজের একটি স্ক্রিপ্ট অনুমান করুন নিম্নলিখিত বিবৃতিটি কার্যকর করে:

document.domain = "company.com";

সেই বিবৃতিটি কার্যকর করার পরে, পৃষ্ঠাটি http://company.com/dir/page.html দিয়ে মূল চেকটি পাস করবে। যাইহোক, একই যুক্তি দ্বারা, company.com document.domain সেট করতে পারেনি othercompany.com

এই পদ্ধতির মাধ্যমে, আপনাকে প্রধান ডোমেনে উত্সারিত একটি পৃষ্ঠায় একটি সাবডোমেনের মাধ্যমে সরবরাহকৃত আইফ্রেম থেকে জাভাস্ক্রিপ্ট এক্সিকিউট করার অনুমতি দেওয়া হবে। এই পদ্ধতিটি ক্রস-ডোমেন সংস্থার জন্য উপযুক্ত নয় কারণ ফায়ারফক্সের মতো ব্রাউজার আপনাকে document.domain পরিবর্তন করতে দেবে না।

উত্স: https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript

ক্রস-অরিজিন রিসোর্স শেয়ারিং পদ্ধতি

  • পদ্ধতির ধরন: AJAX

ক্রস-অরিজিন রিসোর্স শেয়ারিং (CORS) একটি W3C ওয়ার্কিং ড্রাফ্ট যা সূত্র জুড়ে উৎসগুলি অ্যাক্সেস করার সময় ব্রাউজার এবং সার্ভারকে কীভাবে যোগাযোগ করতে হবে তা সংজ্ঞায়িত করে। CORS এর পিছনে মূল ধারণা হল স্বনির্ধারিত HTTP হেডার ব্যবহার করা যাতে ব্রাউজার এবং সার্ভার উভয়ই একে অপরের সম্পর্কে যথেষ্ট জানতে পারে যাতে অনুরোধ বা প্রতিক্রিয়া সফল বা ব্যর্থ হয় কিনা তা নির্ধারণ করতে পারে।

সহজ অনুরোধের জন্য, যে কোনও কাস্টম হেডার এবং GET বা POST যা কোনও text/plain সহ GET বা POST ব্যবহার করে, সেটি অনুরোধটিকে Origin নামে একটি অতিরিক্ত শিরোনাম দিয়ে পাঠানো হয়। মূল শিরোনামটি অনুরোধকারী পৃষ্ঠাটির মূল (প্রোটোকল, ডোমেন নাম এবং পোর্ট) রয়েছে যাতে সার্ভারটি প্রতিক্রিয়াটি সরবরাহ করতে পারে কিনা তা সহজেই নির্ধারণ করতে পারে। একটি উদাহরণ Origin শিরোনাম Origin মতো হতে পারে:

Origin: http://www.stackoverflow.com

যদি সার্ভারটি অনুরোধটি মঞ্জুর করা উচিত তা সিদ্ধান্ত নেয় তবে এটি Access-Control-Allow-Origin শিরোনামটি প্রেরিত একই উত্সটি পুনঃসংযোগ করে বা * যদি এটি একটি পাবলিক সংস্থান হয়। উদাহরণ স্বরূপ:

Access-Control-Allow-Origin: http://www.stackoverflow.com

যদি এই শিরোনামটি অনুপস্থিত থাকে, বা উত্স মেলে না তবে ব্রাউজার অনুরোধটি অকার্যকর করে। সব ঠিক থাকলে, ব্রাউজার অনুরোধ প্রক্রিয়া করে। উল্লেখ্য যে অনুরোধ বা প্রতিক্রিয়া কুকি তথ্য অন্তর্ভুক্ত নয়।

মজিলা টিম CORS সম্পর্কে তাদের পোস্টে প্রস্তাব দেয় যে ব্রাউজারটি XHR এর মাধ্যমে CORS সমর্থন করে কিনা তা নির্ধারণ করার জন্য আপনার সাথে withCredentials সম্পত্তিটির অস্তিত্ব পরীক্ষা করা উচিত। আপনি ব্রাউজারগুলি জুড়ে XDomainRequest অবজেক্টের অস্তিত্বের সাথে XDomainRequest পারেন:

function createCORSRequest(method, url){
    var xhr = new XMLHttpRequest();
    if ("withCredentials" in xhr){
        xhr.open(method, url, true);
    } else if (typeof XDomainRequest != "undefined"){
        xhr = new XDomainRequest();
        xhr.open(method, url);
    } else {
        xhr = null;
    }
    return xhr;
}

var request = createCORSRequest("get", "http://www.stackoverflow.com/");
if (request){
    request.onload = function() {
        // ...
    };
    request.onreadystatechange = handler;
    request.send();
}

উল্লেখ্য যে CORS পদ্ধতিটি কাজ করার জন্য, আপনার যেকোনো ধরনের সার্ভার হেডার মেকানিক অ্যাক্সেস থাকতে হবে এবং কেবল কোনও তৃতীয় পক্ষের সংস্থান অ্যাক্সেস করতে পারবে না।

উত্স: http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/

window.postMessage পদ্ধতি

  • পদ্ধতির ধরন: আইফ্রেম

window.postMessage , যখন বলা হয়, কোনও লিখিত স্ক্রিপ্টটি কার্যকর হওয়া আবশ্যক এমন একটি MessageEvent লক্ষ্য উইন্ডোতে প্রেরণ করা হতে পারে (উদাঃ ইভেন্ট ইভেন্ট হ্যান্ডলারগুলি, যদি কোন ইভেন্ট হ্যান্ডলার থেকে window.postMessage বলা হয়, পূর্বনির্ধারিত মুলতুবি window.postMessage ইত্যাদি। )। MessageEvent এ টাইপ মেসেজ, একটি data প্রোপার্টি রয়েছে যা window.postMessage প্রদত্ত প্রথম যুক্তিটির স্ট্রিং window.postMessage সেট করা হয়েছে, উইন্ডোতে উইন্ডো কলিং window.postMessage মূল নথির উত্সের সাথে সম্পর্কিত একটি মূল বৈশিষ্ট্য window.postMessage বলা হয়, এবং একটি source সম্পত্তি যা উইন্ডো window.postMessage থেকে বলা হয়।

window.postMessage ব্যবহার করতে, একটি ইভেন্ট শ্রোতা সংযুক্ত করা আবশ্যক:

    // Internet Explorer
    window.attachEvent('onmessage',receiveMessage);

    // Opera/Mozilla/Webkit
    window.addEventListener("message", receiveMessage, false);

এবং একটি receiveMessage ফাংশন ঘোষণা করা আবশ্যক:

function receiveMessage(event)
{
    // do something with event.data;
}

postMessage -site আইফ্রেম অবশ্যই পোস্ট postMessage মাধ্যমে ইভেন্টগুলি সঠিকভাবে পাঠাতে হবে:

<script>window.parent.postMessage('foo','*')</script>

যে কোনও উইন্ডোতে যে কোনও উইন্ডোতে এই পদ্ধতিটি অ্যাক্সেস করতে পারে, যে কোনও সময়ে, উইন্ডোতে নথিটির অবস্থান নির্বিশেষে, এটি একটি বার্তা পাঠাতে পারে। ফলস্বরূপ, কোনও ইভেন্ট শ্রোতা বার্তা গ্রহণ করতে ব্যবহৃত হয় প্রথমে অবশ্যই মূল এবং সম্ভাব্য উত্স বৈশিষ্ট্যগুলি ব্যবহার করে বার্তাটির প্রেরকের পরিচয় যাচাই করতে হবে। এটি আলাদা করা যাবে না: origin এবং সম্ভাব্য source বৈশিষ্ট্যগুলি পরীক্ষা করতে ব্যর্থতা ক্রস-সাইট স্ক্রিপ্টিং আক্রমণগুলিকে সক্ষম করে।

উত্স: https://developer.mozilla.org/en/DOM/window.postMessage

একই মূল নীতি

আশা করি এইচটিএমএল / জেএস -এর একই মূল নীতি সম্পর্কিত একটি সম্প্রদায় উইকি তৈরি করতে চাই, আশা করি যে কেউ এই বিষয়ে অনুসন্ধান করতে সহায়তা করবে। এটি SO এ সর্বাধিক অনুসন্ধান করা বিষয়গুলির মধ্যে একটি এবং এটির জন্য কোনও সংহত হওয়া উইকি নেই তাই এখানে আমি যেতে পারি :)

একই উত্স নীতি অন্য উত্স থেকে কোনও দস্তাবেজের বৈশিষ্ট্যগুলি পাওয়ার বা সেট করার থেকে একটি উত্স থেকে লোড হওয়া একটি দস্তাবেজ বা স্ক্রিপ্টকে আটকায়। এই নীতিটি নেটস্কেপ ন্যাভিগেটর 2.0 এ ফিরে আসছে।

একই মূল নীতিগুলির কাছাকাছি যেতে আপনার প্রিয় কিছু উপায় কী?

উদাহরণ verbose রাখা দয়া করে এবং আপনার উত্স লিঙ্ক করুন।


বিপরীত প্রক্সি পদ্ধতি

  • পদ্ধতির ধরন: অ্যাজাক্স

সার্ভারে একটি সহজ বিপরীত প্রক্সি সেট আপ করা, ব্রাউজারটিকে অ্যাজ্যাক্স অনুরোধগুলির জন্য আপেক্ষিক পাথগুলি ব্যবহার করার অনুমতি দেবে, যখন সার্ভার কোনো দূরবর্তী অবস্থানের প্রক্সি হিসাবে কাজ করবে।

Apache এ mod_proxy ব্যবহার করে, একটি বিপরীত প্রক্সি সেট করার মৌলিক কনফিগারেশন নির্দেশিকা ProxyPass । এটি সাধারণত নিম্নরূপ ব্যবহার করা হয়:

ProxyPass     /ajax/     http://other-domain.com/ajax/

এই ক্ষেত্রে, ব্রাউজারটি /ajax/web_service.xml একটি আপেক্ষিক URL হিসাবে অনুরোধ করতে সক্ষম হবেন তবে সার্ভারটি http://other-domain.com/ajax/web_service.xml প্রক্সি হিসাবে কাজ করে এটি সরবরাহ করবে।

এই পদ্ধতির একটি আকর্ষণীয় বৈশিষ্ট্য হল যে বিপরীত প্রক্সি একাধিক ব্যাক-এন্ডগুলির জন্য অনুরোধগুলি সহজেই বিতরণ করতে পারে, এইভাবে লোড ব্যালান্সার হিসাবে কাজ করে।


আচ্ছা, আমি পিএইচপি-এ কার্ল ব্যবহার করেছি এইটিকে রোধ করতে। আমি পোর্ট 82 চলমান একটি webservice আছে।

<?php

$curl = curl_init();
$timeout = 30;
$ret = "";
$url="http://localhost:82/put_val?val=".$_GET["val"];
curl_setopt ($curl, CURLOPT_URL, $url);
curl_setopt ($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($curl, CURLOPT_MAXREDIRS, 20);
curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.5) Gecko/2008120122 Firefox/3.0.5");
curl_setopt ($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
$text = curl_exec($curl);
echo $text;

?>

এখানে জাভাস্ক্রিপ্ট যে পিএইচপি ফাইল কল করে তোলে

function getdata(obj1, obj2) {

    var xmlhttp;

    if (window.XMLHttpRequest)
            xmlhttp=new XMLHttpRequest();
    else
            xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
                document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","phpURLFile.php?eqp="+obj1+"&val="+obj2,true);
    xmlhttp.send();
}

আমার এইচটিএমএল পোর্ট 80 এ WAMP এ রান করে। সুতরাং আমরা সেখানে যেতে, একই মূল নীতি বিপথগামী হয়েছে :-)


আমি JSONP ব্যবহার করি।

মূলত, আপনি যোগ করুন

<script src="http://..../someData.js?callback=some_func"/>

আপনার পৃষ্ঠায়।

some_func () কে তথাকথিত তথাকথিত তথ্য সরবরাহ করা উচিত।


আমি যে একই মূল নীতিটি খুঁজে পেয়েছি সেগুলি অতিক্রম করার সবচেয়ে সাম্প্রতিক উপায় হল http://anyorigin.com/

সাইটের তৈরি করা যাতে আপনি এটির জন্য কোনও url দিন এবং এটি আপনার জন্য জাভাস্ক্রিপ্ট / জাভাস্ক্রিপ্ট কোড তৈরি করে যা আপনাকে এটির মূল নির্বিশেষে HTML / তথ্য পেতে দেয়। অন্য কথায়, এটি কোনও url বা ওয়েবপৃষ্ঠা একটি JSONP অনুরোধ করে।

আমি এটা বেশ দরকারী খুঁজে পেয়েছি :)

এখানে কোনও জাভাস্ক্রিপ্ট কোড anyorigin থেকে রয়েছে:

$.getJSON('http://anyorigin.com/get?url=google.com&callback=?', function(data){
    $('#output').html(data.contents);
});


ব্যক্তিগতভাবে, window.postMessage আমি আধুনিক ব্রাউজারের জন্য পাওয়া সবচেয়ে নির্ভরযোগ্য উপায়। আপনি XSS হামলার জন্য নিজেকে খোলা রাখছেন না তা নিশ্চিত করার জন্য আপনাকে আরও কিছু কাজ করতে হবে, তবে এটি একটি যুক্তিসংগত বাণিজ্য।

সেখানে জনপ্রিয় জাভাস্ক্রিপ্ট টুলকিটগুলির জন্য অনেক প্লাগইন আছে যা window.postMessage মোড়ানো যা উপরে আলোচনা করা অন্যান্য পদ্ধতিগুলি ব্যবহার করে পুরোনো ব্রাউজারগুলিতে একই কার্যকারিতা সরবরাহ করে।


JSONP আসে:

JSONP বা "প্যাডিং সহ JSON" বেস JSON ডেটা ফর্ম্যাটের একটি পরিপূরক, একটি ব্যবহার প্যাটার্ন যা একটি পৃষ্ঠাটিকে অনুরোধ করার অনুমতি দেয় এবং প্রাথমিক সার্ভার ছাড়া অন্য কোনও সার্ভার থেকে JSON ব্যবহার করে আরো অর্থপূর্ণভাবে ব্যবহার করে। JSONP ক্রস-অরিজিন রিসোর্স শেয়ারিং নামে একটি সাম্প্রতিক পদ্ধতির বিকল্প।





same-origin-policy