2

侵入者によるインジェクションを回避するために、URL を介してパラメーターを渡す際に特殊文字を削除することに取り組んでいます。たとえば、以下の URL がありました。

www.sitename.com/people?job=manager

alert以下のように、パラメーターの後にスクリプトを追加しました。

www.sitename.com/people?job=manager"/><script>alert%2844749%29<%2fscript>

URL を実行すると、alertウィル ポップアップが表示されるため、この手法によるサイト情報の取得に脆弱性が生じる可能性があります。$_REQUEST渡されたパラメーターを取得して結果を生成するために使用します。以下に適用できるURLインジェクション技術を回避するための治療法はありますか?

$job = $_REQUEST["job"];

アドバイスありがとう。

4

7 に答える 7

0

まず、$ _ REQUESTを使用しないでください。また、CSRF攻撃から保護するために、html_entities()またはを使用できますstrip_tags()

特定のタグを許可する場合は、HTMLピューリファイヤーを使用できます。

于 2012-06-29T06:57:55.403 に答える
0

次のようなURL

www.sitename.com/people?job=manager"/><script>alert%2844749%29<%2fscript>

それ自体に有害なことは何もしません。

このようなURL、このよう値は、もちろんHTMLに出力され、 HTMLインジェクションが発生します。これが、 HTMLでエスケープする必要がある理由です。

<?php $url = 'www.sitename.com/people?job=manager"/><script>alert%2844749%29<%2fscript>'; ?>

<a href="<?php echo htmlspecialchars($url, ENT_QUOTES); ?>">Click here</a>
于 2012-06-29T06:59:21.880 に答える
0

urlencode 関数を使用します。詳細については、 https://www.php.net/manual/en/function.urlencode.phpをご覧ください。

于 2019-04-14T17:13:24.000 に答える
0

代わりに、次のコードを使用して入力を直接フィルタリングできます。

$job = filter_input(INPUT_GET, 'job', FILTER_SANITIZE_FULL_SPECIAL_CHARS);
于 2021-04-12T15:31:56.600 に答える
0

使用できますstrip_tags()

<?php
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text);
echo "\n";

// Allow <p> and <a>
echo strip_tags($text, '<p><a>');
?>

または、通常の Exp を使用します--

$data = preg_replace('/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi', '', $data);
于 2012-06-29T06:55:06.933 に答える
0

htmlspecialcharsを使用して特別な html 文字をエスケープするか、strip_tagsを使用して文字列からすべてのタグを削除します。

于 2012-06-29T06:56:26.660 に答える