• 締切済み

SQLインジェクションについて

SQLインジェクション対策についてご質問があります。 SQLを入力してそのまま実行するプログラムを作ろうとしています。 ユーザーが入力したSQLをプログラム側でSQLインジェクションを含むかどうかの判定が できるようにしたいのですが、可能なのでしょうか? よろしくお願い致します。

みんなの回答

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.1

>SQLを入力してそのまま実行するプログラムを作ろうとしています。 >ユーザーが入力したSQLをプログラム側でSQLインジェクションを含むかどうかの判定が >できるようにしたいのですが、可能なのでしょうか? 言葉の意味としては、不可能です。 ユーザにデータを入力させたつもりが、データの中にSQL命令を埋め込まれて実行される というのが、SQLインジェクションです。 ユーザにSQL命令を入力させてそのSQLを実行させるなら、SQLインジェクション対策以前の問題。 あなたはSQL実行をさせるプログラムを作ろうとしている訳なので、SQLインジェクション防止技術をつかうと、SQLを実行できなくなってしまいます。 何をさせたくて何をさせたくないかをきちんと決めて、そのさせたくないことをさせないようにプログラムします。もしくはアクセス権限で縛るか。

関連するQ&A

  • SQLインジェクションの対策

    SQLインジェクションの対策 いつもお世話になっております。 SQLインジェクションの対策についてお伺いいたします。 もともと↓のようなSQL文だったものを "select user_id from table where user_id='{$user_id}'" 以下のように変更しました。 "select user_id from table where user_id='" . mysql_real_escape_string($user_id) . "'" 以下のように実行されていたSQL文は select user_idfrom table where user_id='10001' and 'a'='a' ↓のようにエスケープ処理して実行されるようになりました。(入力値は「10001' and 'a'='a」) select user_id from table where user_id='10001\' and \'a\'=\'a' ですが、phpMyAdminで実行してみるとどちらのSQL文も同じ結果が取得できてしまいます。 これでは対策になっていないと思ったので、質問させていただきました。 (magic_quotes_gpcはoffに設定しています。) なにか他の方法がいいのでしょうか。 ご教示よろしくお願いいたします。 <環境> PHP 5.1.6 MySQL 5.0.45

    • ベストアンサー
    • PHP
  • SQLインジェクションが発生する理由

    初めての質問です。よろしくお願いします。 今現在、SQLインジェクションというものが問題になっていますよね いろいろなサイトを回って調べて見たのですが、具体的な対策として、「'(シングルクォーテーション)」などの特殊文字を確実にエスケープすること、くらいしか対策が書かれておりません。 特殊文字のエスケープさえしっかりしておけばSQLインジェクションは発生しない、という印象を受けたのですが、SQLインジェクションがおきてしまったサイトではエスケープ処理をしていなかったということなのでしょうか? それとも、エスケープ処理をしていても何らかの方法で不正なSQLの命令を実行されてしまうのでしょうか? どうにもわからなくて困っているので、どうかよろしくお願いいたします。

  • XSS、CSRF、SQLインジェクションについて

    XSS、CSRF、SQLインジェクションをそれぞれ簡単に説明すると、 XSS・・・動的なWebサイトにおける入力フォームの脆弱性 CSRF・・・ユーザーになりすましてWebサーバーにリクエストすること SQLインジェクション・・・アプリケーションが実行するSQL文に変なものを注入して、意図しない 動作をさせる攻撃のこと で正しいですか?

  • 複文によるSQLインジェクションを防ぐには

    複文によるSQLインジェクションを防ぐには、ユーザー入力値から「;(コロン)」を除去すればOKでしょうか? ご存知の方がいらっしゃいましたら教えてください。 よろしくお願いいたします。

  • SQLインジェクション対策

    Webアプリにて入力フォームからのSQLインジェクション対策を行いたいと思っているのですが その1つとしてpreparedstatement SQLを使用することを考えています。 これを使用すればシングルクォーテーションを使った 悪意のあるSQL文を挿入されることが防げると思うのですが他に何か考慮することって あるのでしょうか。

    • ベストアンサー
    • Java
  • SQLインジェクションについて質問です

    よくSQLインジェクションの攻撃で、改竄されたWEBページからウイルスを仕込まれた。 等という話を耳にしますが、この攻撃でどうやって改竄するのですか? 私が知ってる範囲だと、この攻撃では入力フォームに必ず条件マッチするようなSQLを入れて 情報を取り出したり、DBの情報を書き換えたり、情報を消したりくらいしか出来ない気がするのですが・・ あと、SQLインジェクションの紹介でよく見る、ログイン画面で「' 1=1;--」みたいな入力は誰でも思いつくと思うのですが、DBの情報を書き換えたり消したりするのって そのDBのカラム名とかが分からないとできないですよね。 攻撃者はこれらを推測して行っているのですか。 それともカラム名とかを知り得る攻撃手法があるのでしょうか。 また、SQLインジェクションとは関係ないのですがXSSという攻撃手法もありますよね。 こっちはクッキー情報を盗まれるのが一番大きな被害とありますが クッキー情報を盗まれると具体的に何がまずいのでしょうか。 サーバー側でクッキーに個人の名前とかメアドとかを入れてる場合があるという事ですか?

  • SQL インジェクションについて

    お世話になります。 早速ですみませんが質問をさせていただきます。 「SQL インジェクション」について教えて下さい。 小学5年生だと思って説明してもらえませんか? すみませんが宜しくお願いします。 では、失礼します。

  • prepareでSQLインジェクション対策?

    PHPでMySQLを操作しています。 PDOのprepare()を使えば(プレースホルダを使えば?)、SQLインジェクションは必ず発生しないと言えますか? もし、そうだとすれば、SQLインジェクション対策はかなり簡単ですよね?でも、セキュリティの話でよく取り上げられるということは、実際は他の問題が発生したりするんですかね?

    • ベストアンサー
    • PHP
  • PHPのSQLインジェクションはsprintf?

    PHPのSQLインジェクションですが、sprintf内でクォートをしてあるとそれで大丈夫なのでしょうか? 以下のようなコードがあり、nameは画面入力なのでSQLインジェクションが起こるのでは? と作成者に確認したところ、"%s"してあるから大丈夫との返事をもらいました。 ネット調べるとmysql_real_escape_stringでエスケープしてから"%s"で変換すれば大丈夫といった内容は見つけたのですが、mysql_real_escape_stringなど不要との返事をもらいました。 なぜ?と聞くとそういうものだとしか回答がありません。 sprintf('UPDATE users SET name = "%s" WHERE id = %d', name, id); 結局上記のコードでSQLインジェクションは解消されているのでしょうか?

    • ベストアンサー
    • PHP
  • SQLインジェクション対策

    SQLインジェクション対策で $hoge = htmlspecialchars($hoge); $hoge = mysql_real_escape_string($hoge); を使おうと思っていますが、どちらを先に書けばよいでしょうか?

    • 締切済み
    • PHP

専門家に質問してみよう