2010-12-13 28 views
2

MVCアーキテクチャを使用してPHP & MYSQLを使用してサイトを最初から開始することをお勧めします。しかし、クライアントの要求に応じて、サイトはSQL INJECTIONとCODE INJECTIONを防ぐ必要があります。SQLインジェクションからサイトを防ぐ方法

私は何が必要ですか?

SQLインジェクションやコードインジェクションの防止サイトを開始するのに最適なフレームワークである

OR

私はこれを念頭に置いて議論を作成するように頼んだわけではありません。私はプロフェッショナルの指導で始めることができるように、どちらが優れているかを知りたいだけです。

私は進歩のおかげで...

答えて

3

脱出$_GET[]$_POST[]などからのすべての入力をすぐmysql_real_escape_string()と。

1

文字列パラメータを渡してSQL文を作成するときは、mysql_real_escape_stringを使用します。これには、文字列として扱う数値などのパラメータが含まれます。

0

使用mysql_real_escape_string

+0

なぜdownvoteですか? –

+0

私も知りません。なぜですか? –

5

は、SQLインジェクションを防ぐために、最も信頼性の高い方法ではなく、手動でSQL文を構築する専用のmysqliパラメータ化クエリを使用することです。

誤って使用するのを忘れる危険性が低いので、mysql_real_escape_string()よりはるかに優れています。サーバー側のコードインジェクションを防ぐために

は、これまでどのような状況の下でそれを表示したり、DBに格納する前strip_tags()を持つすべてのユーザー生成コンテンツを扱う、Javascriptの注入を防止するためにeval()

を使用しないでください。

+1

私は賞賛しましたが、strip_tagsだけではXSS攻撃からあなたを守ることはできません。 htmlenititesを考慮し、タグの属性に入力を配置する予定の場合は、 'htmlentitiesはキャッチせず属性をエスケープできるエンティティを作成します。すべてを' ' 'に置き換えます – DampeS8N

3

これらの2つの機能は、あなたを助ける:

function escape($escape) 
{ 
    $escape = mysql_real_escape_string($escape) ; 
    return $escape ; 
} 

function _INPUT($name) 
{ 
    if ($_SERVER['REQUEST_METHOD'] == 'GET') { 
     return strip_tags($_GET[$name]); 
     } 
    if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
     return strip_tags($_POST[$name]); 
     } 
} 

_INPUT(とすべてのフォームをDBとつかむためにエスケープ()関数ですべてを送信します)。 empty($ _ POST ['name'])やisset($ _ POST ['name'])などのブール関数を除いて、$ _POSTまたは$ _GETごとに_INPUT関数を使用することができます。

0

これを行う最善の方法準備されたステートメント、bar noneを使用することです。これにより、コードを手渡して自分でバランスをとる必要がなくなります。 PHPのmysqliにはこれが組み込まれており、この世界への最初の一歩です。これについてはPHP manual pageを見てください。

0

データベースに格納する前にユーザーデータをエスケープする際のヒントをすべて記載しておけば、問題の第2面を考える必要があります。

は、アプリケーションのすべての出力は、この出力フォーマットのルールに基づいてエスケープする必要があります意味ouptuts

エスケープ。 たとえば、HTMLページに何かをエコーするときは、htmlentitesでエスケープする必要があります。その結果、データに含まれるHTMlはhtmlにならないようにします。 そしてcsv出力の場合は、引用符やカンマをエスケープする必要があります.JSONの場合も同様にエスケープする必要があります。出力ごとにルールがあります。

この事は、潜在的に危険なデータ(jsコード、Htmlコード)をDBに格納するために使用されます。挿入する前にSQL注入を防ぐだけです。そして、それが出力の前に適切にエスケープされていることを確認します。

もう1つの考え方は、データベースストレージの前にjsまたはHTMLコードを作成しないようにすることですが、まだ出力されていない場合はエスケープする必要があります。

フレームワークについては、Zend_Filter、Zend_Validate、およびビューのエスケープ機能についてZend Frameworkを見てください。

関連する問題