2

重複の可能性:
PHP サイトで xss 攻撃を回避するためのベスト プラクティスは何ですか

ユーザーが個人情報を入力できるフォームがあります。ユーザーがフォームを送信すると、Web サービスがこれらの情報を処理し、mysql データベースに情報を保存します。

しかし、ユーザーが入力フィールドに html タグ、php コード、または javascript を入力するとどうなるでしょうか。それを防ぎたいと思います。私はjavascriptにはメソッド呼び出しのエスケープhtmlがあることを知っています.phpではstrip_tagsです。

入力フィールドからhtml、php、スクリプトを入力する機能を無効にする正しい方法を知りたいだけです。受信したすべての入力に strip_tags を使用する必要がありますか?strip_tags を使用する場合、スクリプトを無効にするにはどうすればよいですか? または、mysqlでそれを行う方法はありますか?

ありがとうございました

これは次の形式です。

<div>
    <label class='info-title whitetext' for="name">Full Name: </label>
    <input type="text" name="name" id="name" size='25' maxlength="100" required />
</div>

<div>
    <label class='info-title whitetext' for="phone">Phone: </label>
    <input type='text' pattern='\d+' name='phone' id='phone' size='25' maxlength='12' />
</div>

<div>       
    <label class='info-title' for="email">Email: </label>
    <input type="email" name="email" id="email" size='35' maxlength="60" required />
</div>

<div>       
    <label class='info-title' for="address">Address: </label>
    <input type="text" name="address" id="address" size='45' maxlength="50" required />
</div>
4

3 に答える 3

2

試すhtmlspecialchars($string);

これにより、すべての HTML タグが文字コードにエンコードされます (<div>になり&lt;div&gt;、html として解析されずに表示されます)。この方法では、script タグも作成できません。

ただし、コンテンツをデータベースに提供する前に、たとえばエスケープするなどして、コンテンツをクリーンアップしてください(ステートメントmysqli_escape_string()を使用するようにアドバイスする人もいるでしょう)。prepare

HTML 文字でエンコードされた文字列をデータベースに入れることは、おそらくベスト プラクティスではありません。文字列のサイズが不必要に大きくなるだけだからです。(そして、それ自体では SQL インジェクションに対する保護を提供しません)

于 2012-08-20T21:56:09.270 に答える
1

ユーザーの入力をリアルタイムでチェックし、タグが入力されたことを検出したときに具体的にブロックしない限り、「入力フィールドから html、php、スクリプトを入力する機能」を無効にすることはできません。それでも、誰もがそれを望む理由はわかりません。適切な方法は、送信時にユーザーの入力を適切に処理することです。

html タグや php コードなどについては、escapehtml や strip_tags を確実に使用できますが、後でコンテンツを mysql に入れる場合は、SQL インジェクション攻撃について思い出さなければなりません。

この用語に慣れていない場合、ユーザーは mysql クエリを入力して、SQL クエリを妨害する可能性があります。ユーザーが提供したコンテンツをやみくもに「INSERT」ステートメントに挿入すると、それらのステートメントはユーザー入力の sql キーワードによって変更される可能性があります。

SQL インジェクション攻撃を防ぐ方法については、wiki のページを参照してください: http://en.wikipedia.org/wiki/SQL_injection#Mitigation

于 2012-08-20T22:03:07.270 に答える
1

個人的には、好きです$out = str_replace("<","&lt;",$in)。ユーザーの混乱を最小限に抑え、入力した内容を取得する可能性が最も高くなります。

ユーザー入力が (何らかの理由で) HTML 属性になる可能性がある場合は"&quot;.

ユーザー提供のコンテンツを<script>タグに入れたり、最初に置換を実行せずにファイルに保存したりしないでください。

于 2012-08-20T21:46:23.283 に答える