[解決済み] mysql_real_escape_string() を回避する SQL インジェクション
2022-03-14 19:33:30
質問
を使用しても、SQLインジェクションの可能性はありますか?
mysql_real_escape_string()
関数を使用できますか?
このサンプルの状況を考えてみましょう。SQLはPHPでこのように構築されます。
$login = mysql_real_escape_string(GetFromPost('login'));
$password = mysql_real_escape_string(GetFromPost('password'));
$sql = "SELECT * FROM table WHERE login='$login' AND password='$password'";
を使っても、そのようなコードは危険であり、ハックすることが可能であると、多数の人が私に言っているのを聞いたことがあります。
mysql_real_escape_string()
関数が使用されています。しかし、どのような悪用が可能なのか思いつきません?
古典的なインジェクションはこんな感じ。
aaa' OR 1=1 --
は動作しません。
上記のPHPコードを突破するようなインジェクションの可能性をご存知でしょうか?
解決方法は?
次のようなクエリを考えてみましょう。
$iId = mysql_real_escape_string("1 OR 1=1");
$sSql = "SELECT * FROM table WHERE id = $iId";
mysql_real_escape_string()
は、これに対して保護することはできません。
シングルクォートを使っていること(
' '
のように、クエリ内の変数を囲むことで、この現象から身を守ることができます。
また、以下のような方法もあります。
$iId = (int)"1 OR 1=1";
$sSql = "SELECT * FROM table WHERE id = $iId";
関連
-
[解決済み】メッセージ。Trying to access array offset on value of type null [重複]配列のオフセットにアクセスしようとしています。
-
[解決済み] mysql_field_nameを新しいmysqliに変更します。
-
[解決済み] SQL ServerでSELECTからUPDATEする方法とは?
-
[解決済み] PHPでSQLインジェクションを防ぐにはどうしたらいいですか?
-
[解決済み] MySQLでコマンドラインを使用してSQLファイルをインポートするにはどうすればよいですか?
-
[解決済み] SQLテーブルで重複する値を検索する
-
[解決済み] 後で平文を取り出すためのユーザーパスワードの保管について、倫理的にどのように取り組むべきでしょうか?
-
[解決済み] PDOのプリペアドステートメントは、SQLインジェクションを防ぐのに十分ですか?
-
[解決済み】SQL Serverで既存のテーブルにデフォルト値を持つカラムを追加する
-
[解決済み】XKCDコミック「Bobby Tables」のSQLインジェクションはどのように動作するのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】phpのob_start()の使い道は?
-
[解決済み】SQLSTATE[42000]: 構文エラーまたはアクセス違反が発生しました。1064 SQL 構文にエラーがあります - PHP - PDO [重複]。
-
[解決済み】 PHP 未定義関数の呼び出し
-
[解決済み】php, mysql - データベースへの接続数が多すぎるエラー
-
[解決済み】mysqli_select_db()は、パラメータ1がmysqliであることを期待し、文字列が与えられる。
-
[解決済み】メッセージ。Trying to access array offset on value of type null [重複]配列のオフセットにアクセスしようとしています。
-
[解決済み】PDOException SQLSTATE[HY000] [2002] そのようなファイルまたはディレクトリがありません。
-
thinkphp5 timestamp 非整形の数値に遭遇した。
-
[解決済み】書き込みコンテキストでメソッドの戻り値を使用することができない
-
[解決済み] mysql_field_nameを新しいmysqliに変更します。