2011-01-08 2 views
9

私はPHPにはとても新しいので、基本的に私のサイトのコメントシステムを作成しようとしています。私は以下の機能を持っています:htmlentities()とmysql_real_escape_string()はPHPでユーザ入力を消去するのに十分ですか?

$ input = $ _POST ['comment'];

function cleanUserInput($ input){ $ input = mysql_real_escape_string($ input); $ input = htmlentities($ input); return $ input; }

質問がありますが、mysql_real_escape_stringだけでSQLインジェクションを防止するのに十分ですか? htmlentities()は、スクリプト、html、およびスタイルが実際に効果を持ち、テキストとして表示されるのを防ぐのに十分なものですか?

入力を本当に無害にするには、関数にさらに追加する必要がありますか?

+0

。 –

答えて

2

両方の機能doは、あらゆる種類の注射に関するセキュリティ問題のいくつかを解決しますが、アプリケーションで発生する可能性のあるセキュリティバグの量は驚異的です。

あなたがセキュリティ違反者である場合は、大きな問題がありますが、世界中のPHPセキュリティの主要機関の1つであるChris Shiftlett's websiteのチェックを開始することで問題はありません。

そして最後に、あなたはOWASP webを確認することができ、そして、彼らは最も一般的なセキュリティの脅威に追跡し、それらを戦うためにHWに更新を続ける彼らのTop Ten Project、私は助けになることができ

希望。

11

mysql_real_escape_stringで十分ではありません。また、クエリを構造化する方法も考慮する必要があります。注入がまだ可能である、$username$passwordの前後に引用符なしで

$username = mysql_real_escape_string($_GET['username']); 
$password = mysql_real_escape_string($_GET['password']); 
$sql = "SELECT * FROM users WHERE username = $username AND password = $password"; 

:以下、簡単なログインスクリプトを考えてみましょう。 (ユーザ名=テストを考える;のDROP TABLEのユーザー; - データバイバイ:(

mysql_real_escape_stringのは、あなたが正しくあなたのクエリを構築するのIFサニタイズ点から十分である適切に構築クエリの場合、これは正常に動作し

。!。。

"あなたは何を防止しようとしていますか?"あなたはまた、保存され反映されたXSS(クロスサイトスクリプティング)を認識している必要があります。ブラウザでは、少なくとも<script>タグを除外したいでしょう。

あなたの言語に応じて、多くのフィルタとコードがオンラインで利用できます.RailsまたはCodを使用する場合eIgniter、それはあなたのために行われます。

  1. ダウンロードとdamn vulnerable web appをインストールします。

    は限りこの種類のセキュリティに関しては、私は次のように使用することをお勧めします。常に異なる文字セット

  2. の文字を提出しようとしハッキングウェブのインとアウトを教えるために設計されたアプリケーション(PHPベース)
  3. はいつもにあまりにも多くのパラメータを渡すNULLバイト
  4. 回避を提出しようあなたがウェブサイトで再度
  5. 時計はおしゃべりであることと同じように見えることは決してないだろう - クエリ文字列(それはあなたのデータ構造を離れて与えることができます)
  6. はあなたのログ
  7. ダウンロードburpsuiteを見ます。 mysqlのエラーメッセージはデバッグには最適ですが、大量の情報を提供します。多くの場合、クエリ全体が表示されます。

最終行 - ユーザーからのものであれば、を信頼できません!

+0

コメントなしで投票していただきありがとうございます! :) – sethvargo

1

PHP 5.2以降を使用している場合は、組み込みの入力サニタイズを使用できます。例えば

$input = filter_input(INPUT_POST, 'comment', FILTER_SANITIZE_STRING);

参照:HTMLではなく、使用はhtmlspecialchars()をエスケープするため

  1. filter_input
  2. Available filters
関連する問題