ホームページ  >  記事  >  バックエンド開発  >  PHP関数addslashesとmysql_real_escape_stringの違いの分析

PHP関数addslashesとmysql_real_escape_stringの違いの分析

WBOY
WBOYオリジナル
2016-07-25 08:53:23887ブラウズ
  1. CREATE TABLE users(
  2. ユーザー名 VARCHAR(32) CHARACTER SET GBK,
  3. パスワード VARCHAR(32) CHARACTER SET GBK,
  4. PRIMARY KEY(username)
  5. );
コードをコピー

例、シミュレーションのみクエリ データが addslashes (または magic_quotes_gpc) を使用してエスケープされるとどうなるか:

  1. $mysql = array();
  2. $db = mysqli_init();
  3. $db->real_connect('localhost', 'lorui', 'lorui.com', 'lorui_db ');
  4. /* SQL インジェクションの例*/
  5. $_POST['ユーザー名'] = chr(0xbf) . ' OR ユーザー名 = ユーザー名 /*';推測'; $mysql['ユーザー名'] = addlashes($_POST['ユーザー名']); $mysql['パスワード'] = addlashes($_POST['パスワード']); $sql = "SELECT * FROM usersユーザー名 = '{$mysql['ユーザー名']}' AND パスワード = '{$mysql['パスワード']}'"; $result = $db->query($sql); if ($result->; num_rows) { /* 成功*/ } else { /* 失敗*/ }
コードをコピー

addslashes を使用しているにもかかわらず、ユーザー名とパスワードがわからなくても正常にログインできます。 この脆弱性は SQL インジェクションに簡単に悪用される可能性があります。 この脆弱性を回避するには、mysql_real_escape_string、準備されたステートメント (準備されたステートメント、「パラメーター化されたクエリ」)、または主流のデータベース抽象化ライブラリのいずれかを使用します。



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。