ホームページ >バックエンド開発 >PHPチュートリアル >PHPはJavaScriptの値を取得してドメイン名の由来を調べるのが難しい問題がありますね~。
コード全体は次のとおりです
まずブラウザで実行し、コンソールを開いて観察します
http://localhost/test.php
<a href="test1.php">跳转到test1</a>
<?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();?>
<?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>'; }}?>
<?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であることです
見えません要件を理解してください。
前のページのソースを知りたい場合は、$_SERVER['HTTP_REFERER'] を使用してください。
何が問題なのか聞いてもいいですか?あなたが対処しているのは何ですか? それともこの問題を調査しますか?何をしようとしているのか理解できないので、ごめんなさい
クロスサイトリクエストフォージェリであるCSRF攻撃を防ぐための技術研究と言えます
そして、AJAXを呼び出して実行するコードには自信がありません正しい方法は、ajax を正常に返すことです。その後、操作を続行します。
私がやったことの実現可能性はまだ検討されていません。
何か良い方法があれば教えてください
リクエスト全体を偽造することができます
これは確かに偽造に困難をもたらしますが、コードは非常に複雑になります...
これを回避し、Cookie/セッションを使用してユーザーを取得し、取得できない場合はエラーを報告することができます。
ユーザーのリクエストが頻繁すぎる場合はリクエストをブロックします。その後、キャッシュを使用して実装すれば、パフォーマンスは問題ないはずです。