2

私はフォームのなりすましについて読んでいますが、渡された値が適切に検証されていることを確認できるのに、なぜそれを防ぐことがそれほど重要なのか理解できませんでしたか?おそらく私はここで何かが欠けていますが、ここに例があります:

example.org/form.html:

<form method="post" action="post.php">
    <input type="text" name="content" value="something">
    <input type="submit" name="post" value="Post">
</form>

example.org/post.php:

if (isset($_POST['content']))
{
    $content = filter_var($_POST['content'], FILTER_SANITIZE_STRING);
    //use $content as a sanitized variable, pass it to a database, etc.
}

悪意のあるユーザーは、form.htmlの入力フィールドをたとえばに変更するだけですが、<textarea name="content">something here</textarea>それは何かにどのように影響しますか?とにかく、post.phpスクリプトの文字列からタグが削除されていることを確認します。

だからここに私の質問があります:適切な入力検証があれば、PHPフォームのなりすましはセキュリティの観点からほとんどまたはまったく危険ではないと仮定するのは安全ですか?悪意のあるユーザーがname="content"、データベースなどを効果的に無効にする可能性のある属性(textarea、select、およびその他すべてのタグを除く)を使用してスクリプトに渡すことができるものは他にありますか?他に何もできないのなら、なぜトークンを使うのですか?

4

2 に答える 2

2

危険$_POSTなのは、SQLクエリ(SQLインジェクション)などのコンテンツを使用している場合や、入力を直接呼び出しに入れている場合exec(...)(とにかく良い習慣ではありません)などです。入力をクリーンアップしている限り(検証/スクラブ)危険はありません。重要なルールは次のとおりです。

ユーザーからの入力を絶対に信用しないでください。

于 2013-03-25T14:22:47.467 に答える
1

具体的なフォームは、いくつかの攻撃ベクトルを付与します。

1)SQLインジェクション攻撃

未検証のデータにはSQLコードが含まれている可能性があり、データベース全体でデータを変更したり、データを削除したり、データを読み取ったりすることができます(アプリケーションによって異なります)。

2)クロスサイトリクエストフォージェリ(XSRF)

受信するデータが実際に自分のサイトからのものであるかどうかを確認できない場合(つまり、セッション永続トークンを使用)、他のサイトがWebページをコピーして、すべてのリクエストのプロキシとして機能する可能性があります。

これを行う理由は、送信されたデータのコピーを作成できるためです。これは、たとえば釣りに使用できます。

3)クロスサイトスクリプティングインジェクション

データ自体がデータベースに害を及ぼさず、Webサイトからのものであっても、入力にjavascriptを含めることができます。これは、コンテンツがサイトに表示されるたびに実行されます。(通常、alert(1)などでテストできます)。

これは、JavaScriptを取り除くことで防ぐことができます。

于 2013-03-25T14:30:37.293 に答える