2009-07-08 6 views
0

「私たちはユーザーの入力を信用してはいけません」これは私がウェブ上のどこかから読んだものです。ユーザ入力を確認してmysql注入を防止する方法は何ですか?

現在、私はウェブフォームを持っており、ユーザー名とメールアドレスを入力しています。ユーザ名フィールドの場合、mysqlの注入を制御、チェック、防止する方法は?現在、私のPHPスクリプトに私はこれだけの操作を行います。(それが何であるかを覚えて、私はそれを見つけたカントができませんでした

$username = mysql_real_escape_string($_POST['username']); // prevent mysql injection 

を私は、いくつかのチュートリアルを見てmysql_real_escape_stringの関数の前に、彼らはなど、にhtmlentities、などの他の機能が含まれます今、一息)

mysql_real_escape_stringの前に、いわゆる "htmlentities"関数を含める必要がありますか?

通常、ユーザーの入力データの確認に使用する方法は何ですか?

屋ああ、いくつかの他の機能:私はそれらを

stripslashes(); 
serialize(); 
urlencode(); 

を含める必要がありますか?

+0

新しい質問をする前に検索してください。 http://stackoverflow.com/search?q=sql+injection –

答えて

11

あなたのデータをデータベースに入れている限り、正しいことです。 SQLインジェクション攻撃から保護されています。

htmlentities()およびhtmlspecialchars()は、SQLインジェクション攻撃とは関係ありません。彼らはXSSの攻撃に関連しています。これはあなたが調べなければならない全体的なトピックであり、ユーザーの入力をウェブに戻して表示している場合は関連する問題です。

+0

自分自身をより良くすることはできませんでした。 http://en.wikipedia.org/wiki/Cross-site_scripting –

+0

SQLインジェクションとXSS以外の攻撃は何ですか? htmlentities()とhtmlspecialchars()をインクルードすると、XSS攻撃が防止されますか? – jingleboy99

+0

他の攻撃については、次の質問を参照してください。http://stackoverflow.com/questions/438073/do-stackoverflow-users-agree-with-the-cwe-sans-top-25-most-dangerous-programming htmlentities()およびhtmlspecialchars()は、出力を生成し、入力を受け取っていないときに使用する必要があり、同時に両方を使用することはありません。実際にあなたを守るこれらの方法のどれかが大いに期待されるためには、魔法の儀式として扱う必要が少なくなり、彼らが何をしているのか、*なぜ*そして*どのようなものを適用すべきかを理解するためにもっと働く必要があります。 – chaos

1

@chaosは

権利であるあなたも、あなた

2

ためPARAMATERSをエスケープしますPDOのようにあなたはまた、(私はのためのパラメータ化クエリと同等だと思うprepared statementsを使用して見て可能性があり、データベース抽象化レイヤを使用することができます言ったようにSQL Server)を使用すると、攻撃対象がさらに減少します。