img src
タグでphpスクリプトが実行されるのをブロックすることは可能ですか?
この方法で Web ページで呼び出された場合、 http://example.com/page.phpのスクリプトを実行したくありません。
<img src="http://example.com/page.php">
ページが直接開かれた場合、またはユーザーがそのページからのリンクをクリックした場合にのみ実行したいので、リファラーをブロックすることは解決策ではありません。
img src
タグでphpスクリプトが実行されるのをブロックすることは可能ですか?
この方法で Web ページで呼び出された場合、 http://example.com/page.phpのスクリプトを実行したくありません。
<img src="http://example.com/page.php">
ページが直接開かれた場合、またはユーザーがそのページからのリンクをクリックした場合にのみ実行したいので、リファラーをブロックすることは解決策ではありません。
ええ、acceptヘッダーを使用してこれを行うことは可能ですが、個々のユーザーが保護をバイパスすることができます。ブラウザが画像をダウンロードしているとき、予想されるデータをヘッダーに送信します。たとえばAccept: image/png,image/*;q=0.8,*/*;q=0.5
、これはもちろん信頼できません。ユーザーがこのヘッダーをオフにしたり、ブラウザがこのヘッダーを送信しなかったりする可能性があるためです。ここでは、 httpAcceptヘッダーの互換性
に関する記事を読むことができます。
別の有用なヘッダーはヘッダーかもしれません Referer
。このヘッダーは、このリクエストを呼び出したサイト(そのサイトの画像、サイトのCSS、またはこのサイトからたどったリンク)を示します。ルールは同じです。ほとんどのユーザーはヘッダーを送信しますが、一部のユーザーはヘッダーをオフにする場合があります。
多くの人が、プライバシーを高めるためにリファラーヘッダーをブロックするプラグインをインストールしています。
少しテストをしました。content-type を text/html (およびおそらく画像以外のもの) としてフラッシュすると、Firefox と IE は完全な応答を待つのをやめるようです。しかし、それらが切断されたことはわかりませんでした。ただし、Chrome はページ全体を待機していました。
したがって、ブラウザーが切断されない場合、または PHP がそれを検出できない場合は、とにかくページ全体をレンダリングする必要があるようです。また、すべてのヘッダー設定を非常に早い段階で決定する必要があります。したがって、これは価値がありません。
frametest.html
<html>
<head>
<title>Frame test</title>
</head>
<body>
<h1>Frame test</h1>
<p>The following frame is not to be displayed in frames!</p>
<img src="frametest.php"/>
</body>
</html>
frametest.php
<?php
header('Content-Type: text/html');
echo " ";
flush();
sleep(3);
echo " \r\n ";
flush();
$aborted = (connection_aborted() ? 'yes' : 'no');
$status = (connection_status() ? 'yes' : 'no');
$temp = mail('your@email.here', 'Frametest', 'Client Aborted: ' . $aborted . ' Status: ' . $status);
?>
<html>
<head>
<title>test</title>
</head>
<body>
<h1>Test</h1>
<p>Not to be displayed in frames!</p>
<p>Mail ok? <?php echo ($temp ? 'Yes' : 'No'); ?> </p>
</body>
</html>
いいえ。画像タグで PHP スクリプトが実行されるのをブロックする方法はありません。
ただし、スクリプトが実行されると、ヘッダーに応じて異なるコンテンツを送り返すことができます。ヘッダーは変更できるため、これは何かを防ぐ信頼できる方法ではありません。
ただし、スクリプトがimg
タグで実行されることは問題にはなりません。ブラウザは、コンテンツが画像ではないことを確認すると、単に破棄し、何もしません (または、何らかのエラーを表示する場合があります)。