0

XSS を防止する目的で、ユーザー入力フィールドにコードを挿入するテストを行っています。

OK - 更新: 再現可能な以下のコードを書きました。次のインジェクションを入力すると、テキスト フィールドはリダイレクトされますが、テキストエリアはリダイレクトされません。また、元のフォームでは、エコーに続くいくつかの追加属性 (size="100px" など) が原因でリダイレクトされないこともわかります。しかし本質的に、それは脆弱性を示しています。テキストエリアフィールドを使用しないのはなぜですか?

フィールドへの入力:

<script type='text/javascript'>
window.location = 'http://www.example.com/'
</script>'";

コード:

<?
$descr='';
$title='';
if (isset($_POST['descr'])){
    $descr = $_POST['descr'];
}
if (isset($_POST['title'])){
    $title = $_POST['title'];
}
?>
<form method=post action=<? echo $_SERVER['PHP_SELF']?> enctype='multipart/form-data'>
    Title: <input  type="text" name='title'><? echo $title ?></input>
    Description: <textarea name='descr'><? echo $descr ?></textarea>
    <input type=submit name='save' value='Save Post'>
</form>
4

2 に答える 2

1

その特定のコードを文脈から切り離して見ても、明らかなことは何もありません。ここでどの $title や $descr が割り当てられているかはわかりません。変数はstrip_tagsまたはhtmlentitiesを使用して初期化されることがわかっています。

たとえば、その出力は、strip_tags を介して実行されたように見えます。

$title = strip_tags($_POST['title'])

<input type=text name='title' value= '<? echo $title ?>'" >   
于 2012-12-11T06:09:03.223 に答える
0

入力フィールドまたはテキストエリアにユーザー入力を表示しないでください。ブラウザはその場所からの実行を許可していません。次を試してください:

<div>
<? echo $descr ?>
</div>
于 2012-12-11T06:07:03.907 に答える