2012-03-07 3 views
0

私は関連する登録プロセスの後でしか利用できない曖昧なアプリケーションを構築しているため、悪意のあるデータを頻繁に送信しないでください。フォーム検証は主にJavaScriptのみで行われ、サーバー側のセキュリティ検証のみ

私はCodeigniter 2.1を使用してすべてのPOST変数をフィルタリングします。 Codeigniterは、POSTデータによるSQLインジェクション攻撃を防ぐために、PHP関数mysql_real_escape_stringを使用します。

JavaScriptを使用してすべての検証クライアント側で行います。 JavaScriptの検証はうまくいく。もちろん、ユーザーはcURLや他のユーティリティを使用してクライアント側の検証をバイパスすることができますが、CodeigniterのPHPによる検証によりSQLインジェクションが防止されるはずです。

SQLインジェクション攻撃からデータベースを保護するために、検証クライアントサイドとトラストコードを実行できますか?

+0

SQLインジェクションは心配することの1つにすぎません(あなたはおそらくそれに対して安全です)。 **常にサーバー側の検証**を使用する必要があります.Javascriptの検証は便利な機能です(Javascriptを無効にすることもできますが、セキュリティについて言えば何も価値がありません)。ユーザーはあらゆる種類のデータを送信することができ、フォームを操作することができ、cURLは必要ありません。 – kapa

+0

私は、サーバー側の検証を実装する必要があり、Codeigniterはサーバー側の検証のレベルを実装していることに同意します。質問:Codeigniterは十分な検証を行いますが、検証はまったく必要ありません。 – steampowered

+0

確かに十分ではありません。それはいくつかの種類の攻撃を防ぐことができますが、常に厳格にする必要があります。日付が必要な場合は、日付のみを受け入れます。番号が必要な場合は、番号のみを受け入れます。クライアント側の検証は存在しないと考えるべきです。また、フィルタリングと検証は同じではありません。 – kapa

答えて

2

これは、codeigniterが主張するものです。これはsystem/core/Security.phpファイルにあります。

クロスサイトスクリプティングハックを防止できるようにデータをサニタイズします。 この機能は相当量の作業を行いますが、非常に徹底的です。 は、最も不明確なXSS試行さえ防止するように設計されています。何も これまでの100%絶対確実ですが、私は 何もフィルタを渡すことができませんでした。

1

これはかなり簡単なIMHOです。 mysql_real_escape_stringを使用する場合は、すべての場合において安全ではありません。詳細については、この回答を参照してください:Best way to prevent SQL Injection in PHP

あなたが安全でないという事実の他に、mysqlと話すために古くなった機能も使用しています。

また、する必要がありますサーバー側の検証!これまでにクライアント側を信頼することは決してありません!

+0

私はサーバー側の検証を実装する必要があり、Codeigniterはサーバー側の検証のレベルを実装していることに同意します。質問:Codeigniterは十分な検証を行いますが、検証はまったく必要ありません。 – steampowered

関連する問題