-
- CREATE TABLE users(
- ユーザー名 VARCHAR(32) CHARACTER SET GBK,
- パスワード VARCHAR(32) CHARACTER SET GBK,
- PRIMARY KEY(username)
- );
コードをコピー
例、シミュレーションのみクエリ データが addslashes (または magic_quotes_gpc) を使用してエスケープされるとどうなるか:
-
- $mysql = array();
- $db = mysqli_init();
- $db->real_connect('localhost', 'lorui', 'lorui.com', 'lorui_db ');
- /* SQL インジェクションの例*/
- $_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、準備されたステートメント (準備されたステートメント、「パラメーター化されたクエリ」)、または主流のデータベース抽象化ライブラリのいずれかを使用します。
|