0

img srcタグでphpスクリプトが実行されるのをブロックすることは可能ですか?

この方法で Web ページで呼び出された場合、 http://example.com/page.phpのスクリプトを実行したくありません。

<img src="http://example.com/page.php">

ページが直接開かれた場合、またはユーザーがそのページからのリンクをクリックした場合にのみ実行したいので、リファラーをブロックすることは解決策ではありません。

4

3 に答える 3

1

ええ、acceptヘッダーを使用してこれを行うことは可能ですが、個々のユーザーが保護をバイパスすることができます。ブラウザが画像をダウンロードしているとき、予想されるデータをヘッダーに送信します。たとえばAccept: image/png,image/*;q=0.8,*/*;q=0.5
、これはもちろん信頼できません。ユーザーがこのヘッダーをオフにしたり、ブラウザがこのヘッダーを送信しなかったりする可能性があるためです。ここでは、 httpAcceptヘッダーの互換性
に関する記事を読むことができます。

別の有用なヘッダーはヘッダーかもしれませんReferer。このヘッダーは、このリクエストを呼び出したサイト(そのサイトの画像、サイトのCSS、またはこのサイトからたどったリンク)を示します。ルールは同じです。ほとんどのユーザーはヘッダーを送信しますが、一部のユーザーはヘッダーをオフにする場合があります。
多くの人が、プライバシーを高めるためにリファラーヘッダーをブロックするプラグインをインストールしています。

于 2013-02-09T00:27:49.563 に答える
0

少しテストをしました。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>
于 2013-02-09T01:28:10.080 に答える
0

いいえ。画像タグで PHP スクリプトが実行されるのをブロックする方法はありません。

ただし、スクリプトが実行されると、ヘッダーに応じて異なるコンテンツを送り返すことができます。ヘッダーは変更できるため、これは何かを防ぐ信頼できる方法ではありません。

ただし、スクリプトがimgタグで実行されることは問題にはなりません。ブラウザは、コンテンツが画像ではないことを確認すると、単に破棄し、何もしません (または、何らかのエラーを表示する場合があります)。

于 2013-02-09T00:43:46.747 に答える