ブラウザーの同一生成元ポリシーを理解しようとしています。理論的には問題ないようです。だから私は今、小さなデモを使ってそれを実際に理解しようとしています.
wamp でホストされている 2 つのドメイン、つまり domain1.com と domain2.com があります。
domain1.com は、index.php、innocent.php、および javascript フォルダー内の 2 つの js ファイル、つまり dom1_javascript.js と dom1_normal.js で構成されます。
上記のファイルの詳細は次のとおりです。 -
index.php
<?php
$value = "domain 1 cookie";
// send a simple cookie
setcookie("Dom1Cookie",$value);
?>
<html>
<script type="text/javascript" src="../javascript/dom1_javascript.js">
</script>
<body>
this is from doamin 1
</body>
</html>
innocent.php
<?php
$userSecret=$_GET['userCreds'];
if($userSecret)
{
echo "the user's secret is "+$userSecret;
}
else
{
echo "sorry user secret not found";
}
?>
dom1_javascript.js
alert(document.cookie);
dom1_normal.js
alert("alert domain 1");
alert(document.cookie);
//referring the div
var bdy=null;
// creating the form
var secretForm=document.createElement("form");
secretForm.id="goodForm";
secretForm.method="get";
var myQryStr="http://domain1.com/innocent.php?userCreds=abcd";
alert(myQryStr);
secretForm.action=myQryStr;
//creating the text box in the form
var hiddenBox=document.createElement("input");
hiddenBox.type="text";
hiddenBox.name="secBox";
hiddenBox.value="abhinav";
//appending the box to the form
secretForm.appendChild(hiddenBox);
//appending the form to the div
bdy=document.getElementById("mydiv");
alert(bdy);
bdy.appendChild(secretForm);
//submitting the form
document.getElementById("goodForm").submit();
domain2.com は、index.php、viz、index.php、および index1.php の 2 つのバージョンで構成されています。
上記のphpファイルの詳細は次のとおりです。 -
index.php
<?php
$value = "domain 2 cookie";
// send a simple cookie
setcookie("Dom2Cookie",$value);
?>
<html>
<head>
<script type="text/javascript" src="http://domain1.com/javascript/dom1_javascript.js">
</script>
</head>
<body>
<div id="mydiv">
<img src="http://domain1.com/images/dom1.bmp"/>
this is from doamin 2
</div>
</body>
</html>
index1.php
<?php
$value = "domain 2 cookie";
// send a simple cookie
setcookie("Dom2Cookie",$value);
?>
<html>
<head>
<script type="text/javascript" src="http://domain1.com/javascript/dom1_normal.js">
</script>
</head>
<body>
<div id="mydiv">
<img src="http://domain1.com/images/dom1.bmp"/>
this is from doamin 2
</div>
</body>
</html>
これらのスクリプトをテストするためにブラウザとしてFirefoxを使用しています。まず、ブラウザで domain1.com にアクセスします。これにより、domain1 Cookie が設定されます。次に、domain2.com/index.php に移動します。予想どおり、domain2/index.php のスクリプトは domain2 Cookie を設定します。次に、domain1 からの JavaScript がロードされます。
alert(document.cookie)
このスクリプトを実行すると、domain2 Cookie の値が警告されます。
仮定 1: - ここでの私の理解では、スクリプトがドメイン 1 から呼び出された場合でも、ブラウザーの同じオリジン ポリシーにより、ドメイン 1 の Cookie を警告せず、代わりにドメイン 2 の Cookie を警告したということです。
上記の仮定が正しいかどうか教えてください。
ここで、ブラウザーのキャッシュをクリアし、ブラウザーからすべての Cookie を削除します。domain1.com を再度実行すると、domain1 Cookie が再度設定されます。そして、今度は domain2.com/index1.php に移動し、domain2 の Cookie を設定し、次に存在するスクリプトにアクセスします
domain1.com/javascript/dom1_normal.js
ここで、私の仮定 1 が正しかった場合 (つまり、domain2.com にインポートされた場合、domain1.com からの JavaScript は、同じオリジン ポリシーに従って、受信ドメインではなく、domain2 のみを参照して実行されます)、この場合もそうする必要があります。 dom1_normal.js と同じです。したがって、dom1_normal.js の JavaScript は、domain2/index1.php のすべての HTML 要素にアクセスできる必要があります。
bdy=document.getElementById("mydiv");
alert(bdy);
null を警告する domain1.com/javascript/dom1_normal.js で
どこが間違っているのか教えてください。そして、私は 10 を超える議論 (スタック オーバーフローや、MDN、wiki、Google などを含むその他の場所) や同じオリジン ポリシーに関する記事を調べてきましたが、どれもその考えを明確にしてくれませんでした。