SQLインジェクション:
通常の状況では:
delete.php?id=3;
$sql = 'ニュースから削除 where id = '.$_GET['id'];
悪質な状況:
delete.php?id=3 or 1;
$sql = 'id = 3 or 1のニュースから削除' -------これを実行すると全てのレコードが削除されます
適切な措置を講じるべきである。 。 。たとえば、使用する前に数値であるかどうかを確認するなどです。
クライアントから得られる情報は決して信頼できるものではないことを自分自身に納得させてください。 !
エスケープ:
クライアントから送信されるデータには、一重引用符やスラッシュなどの特殊文字が悪意を持って含まれている場合があるため、エスケープして通常の文字に変換する必要があります。この場合、文字列にスラッシュが追加されます ( string $ str )。関数は変数をエスケープできます。ただし、配列内の要素をエスケープする場合は、次のように foreach を使用して配列をループします。
ユーザー定義関数 funcname を配列 array 内の各セルに適用します。この関数は、より深い配列に再帰的に入ります。通常、 funcname は 2 つのパラメータを受け入れます。入力パラメータの値が最初のパラメータとして使用され、キー名が 2 番目のパラメータとして使用されます。オプションの引数 userdata が指定されている場合、それはコールバック funcname の 3 番目の引数として渡されます。成功した場合は TRUE を返し、失敗した場合は FALSE を返します
つまり、カスタム関数を使用する場合、少なくとも 2 つのパラメーターを受け取ることができる必要がありますが、addslashes() は 1 つのパラメーターしか受け取ることができないため、次のように関数をカスタマイズします。 ;;
システムは自動的にエスケープします:
function _addslashes(&$v,$k) { $v = addslashes($v); }
array_walk_recursive(&$_GET,'_addslashes');array_walk_recursive(&$_POST ,'_addslash es');
array_walk_recursive (&$_COOKIE,'_addslashes');}
http://www.bkjia.com/PHPjc/327604.html
技術記事
SQL インジェクション: 通常の状況: delete.php?id=3; $sql = 'delete from news where id = '.$_GET['id']; 悪意のある状況: delete.php?id=3; 'ID = 3 または 1 のニュースから削除' ---...