ホームページ  >  記事  >  バックエンド開発  >  PHPはJavaScriptの値を取得してドメイン名の由来を調べるのが難しい問題がありますね~。

PHPはJavaScriptの値を取得してドメイン名の由来を調べるのが難しい問題がありますね~。

WBOY
WBOYオリジナル
2016-06-23 13:56:12773ブラウズ

コード全体は次のとおりです
まずブラウザで実行し、コンソールを開いて観察します
http://localhost/test.php

<a href="test1.php">跳转到test1</a>

次に test1.php にジャンプし、コード
<?phpsession_start();require "./test2.php";class A{	function __construct()	{		$b=new B();		$b->judge();	}	function judge()	{		if($_SESSION['status']==1){			return true;			}else{			return false;			}	}	function run()	{		if($this->judge()){			echo 'success';			}else{			echo 'error';			}	}}$a=new A();$a->run();?>

を使用して実行しますクラス A メソッド まずドメイン名の由来を判断し、それが localhost からのものであるかどうかを判断します。そうであれば、エラー
test2.php コード
<?phpsession_start();class B{	function judge()	{		echo '<script>		var xmlhttp;		if (window.ActiveXObject){		  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");		}else{		  xmlhttp = new XMLHttpRequest();		}		xmlhttp.open("POST", "./test3.php", true);		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");		xmlhttp.send("data="+document.referrer);		console.log(document.referrer); //控制台观察		xmlhttp.onreadystatechange = function(){		  if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {		  }		};</script>';	}}?>

test3.php の代わりに成功を出力し、ajax 実行ファイル
<?phpsession_start();if(stristr($_POST['data'], 'localhost')){    			$_SESSION['status']=1;    		}else{    			$_SESSION['status']='';    		}?>


を呼び出します。

ディスカッションへの返信 (解決策)

問題は、元のコードの最終出力が

<script>		var xmlhttp;		if (window.ActiveXObject){		  xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");		}else{		  xmlhttp = new XMLHttpRequest();		}		xmlhttp.open("POST", "./test3.php", true);		xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");		xmlhttp.send("data="+document.referrer);		console.log(document.referrer);		xmlhttp.onreadystatechange = function(){		  if (xmlhttp.readyState === 4 && xmlhttp.status === 200) {		  }		};</script>success
であることです
それなら、誰かがそれを php でキャッシュする方法を持っているかもしれません。実際、私もそれを試しました
b3108f59f31773c6bc097c3111f6921a**********3fa3f474cbb4b6d948eebecb1be5dde4 となります。

< html
w3c 宣言ヘッダーの js コードはスタイルのパフォーマンスに影響します

あなたが扱っている問題で何をしたいのか、あるいはこの問題を研究しているのか聞いてもいいですか?何がしたいのか理解できないので、ごめんなさい

何がしたいのか教えてください。どのような問題に遭遇しましたか


何をしたいのか教えてください。どのような問題が発生しましたか?
この関数の機能は、クラス内のメソッドを実行するときに、リクエストが現在のサイトから来たかどうかを最初に判断することです。そうでない場合は、実行されません。クロスサイトリクエスト攻撃を防ぎます。
当初は $_SERVER['HTTP_REFERER'] を使用する予定でしたが、このサーバーのパラメータは人為的に偽造できるのはローカル JS コード内の
document.referrer だけなので、これを使用して判断します

見えません要件を理解してください。
前のページのソースを知りたい場合は、$_SERVER['HTTP_REFERER'] を使用してください。


何が問題なのか聞いてもいいですか?あなたが対処しているのは何ですか? それともこの問題を調査しますか?何をしようとしているのか理解できないので、ごめんなさい

クロスサイトリクエストフォージェリであるCSRF攻撃を防ぐための技術研究と言えます

そして、AJAXを呼び出して実行するコードには自信がありません正しい方法は、ajax を正常に返すことです。その後、操作を続行します。
私がやったことの実現可能性はまだ検討されていません。

実際、私の考えに従う必要はありません。

何か良い方法があれば教えてください

リクエスト全体を偽造することができます

これは確かに偽造に困難をもたらしますが、コードは非常に複雑になります...

これを回避し、Cookie/セッションを使用してユーザーを取得し、取得できない場合はエラーを報告することができます。

ユーザーのリクエストが頻繁すぎる場合はリクエストをブロックします。その後、キャッシュを使用して実装すれば、パフォーマンスは問題ないはずです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。