シングルクォートの入力ミスによる影響とSQL注入攻撃の可能性

このQ&Aのポイント
  • IDに誤ってシングルクォートが含まれた場合、ログインに影響が出る可能性があります。
  • ID入力欄にシングルクォーテーションのみ入力した場合でも、SQL注入攻撃が成立する可能性があります。
  • ログイン時には十分な注意が必要であり、シングルクォートの入力ミスによる影響を防ぐためには、適切な入力検証やエスケープ処理が必要です。
回答を見る
  • ベストアンサー

IDに誤ってシングルクォートが含まれた場合。

ログインする際にiPhoneから入力していますが、万が一誤ってID入力欄にシングルクォーテーションが入った場合、どうなってしまうのでしょうか。 例) ID 「000zero」 を 誤って 「'00zero」 と入力ミスしてログインボタンをクリックした場合。 SQLの実行等を詳しく回答していただければ幸いです。 また、ID入力欄に、シングルクォーテーションのみ「'」入力してログインボタンをクリックした場合でも、SQL注入攻撃が成立してしまうのでしょうか。 ログインする際に細心の注意を払っていますが、万が一という事ですので不安です。 (※ここで質問した事で、悪用する事は一切ございません) (※攻撃するつもりも一切ございません)

noname#246835
noname#246835

質問者が選んだベストアンサー

  • ベストアンサー
  • ngwaver
  • ベストアンサー率26% (323/1202)
回答No.1

このレベルが攻撃になってしまうのは、サイト側に問題がありますので質問者様は気にしないで良いです。 例えば、質問者様が人の家を訪問して、インターホンを鳴らしたところ、住人がそれに驚いてショック死したとして、質問者様が殺人罪になると思いますか? >(※ここで質問した事で、悪用する事は一切ございません) >(※攻撃するつもりも一切ございません) 質問者様が悪用するつもりがなくとも、他の閲覧者もいますので、この注意書きはあまり意味がないように思います。

noname#246835
質問者

お礼

ありがとうございました。 本当に助かりました。

その他の回答 (2)

  • asciiz
  • ベストアンサー率70% (6640/9407)
回答No.3

シングルクォート1つ程度では、攻撃にも何にもなっていません。 例えば、userdataデータベースから、入力されたユーザー名のユーザー番号を取得する、と言うSQL文は、こんな風に書きます。 「SELECT userid FROM userdata WHERE name='%1';」 %1 の部分に、入力されたユーザー名が入るというわけですが。 「kimura」と入力したつもりが「'kimura」と入ってしまった場合。 「SELECT userid FROM userdata WHERE name='kimura';」 を実行するはずが、 「SELECT userid FROM userdata WHERE name=''kimura';」 と言う命令になってしまいます。 これでは、データベースを「name=''」(何も無し)で検索することになってしまいますし、その後の「kimura'」という部分も不正な命令となってしまいます。 その結果、このデータベース検索自体が失敗します。 でもまあ、単なる入力ミスで起こるのは、その程度です。 エラーが表示されて、終わりです。 ---- SQLインジェクションとは、上記のような手抜きプログラムであることを見抜き、さらに検索に使うパラメータを知っていて、ユーザー名に次のような物を入力するんです。 ユーザー名「kimura' OR name='suzuki」 これが先ほどのSQL文に入力されると、 「SELECT userid FROM userdata WHERE name='kimura' OR name='suzuki';」 と言う、正しく動くSQL命令になり、通常では為されないデータベース検索をしてしまって、後の処理に影響を与えます。 この例では、普段は1つしか抽出されない userid が、複数抽出されることになり、それを想定していないそれ以降のプログラムがどう動くかわかりません。 そのように、SQLインジェクションを狙った入力というのはSQL文を変えようとするキーワードが意図的に入っているものですので、「入力間違い」が「SQLインジェクション攻撃だ!」などと誤解されることは、まず無い訳です。 ---- そしてそもそも、ユーザーの入力文字列をそのままSQL文に放り込むなんてことが、重大な手抜き、致命的な欠陥です。 そんなシステムを作る方が悪い。 常識的なプログラマであれば、ユーザーの入力をクリーニングしてから、データベース検索などに使います。 例えば、ユーザー名は一連の文字列と決まっていますから、 ・空白があれば、削除する。 ・記号は16進数表記に展開する。 こういったことを行います。 そうすると、攻撃を意図していた入力 >ユーザー名「kimura' OR name='suzuki」 これは、 ユーザー名「kimura%27ORname=%27suzuki」 と言う無害な文字列になってから、SQL文に放り込まれます。 そうすると、 「SELECT userid FROM userdata WHERE name='kimura%27ORname=%27suzuki';」 こういう検索を実行することになり、単に「そのようなユーザーは存在しません」となるわけです。 そうやって、SQLインジェクション攻撃を受けても異常動作をしないようにする物です。 (まあ、対策してなさそうなシステムに当たってしまったわけですが) 結論として、 ・シングルクォート1つの入力程度で、ハッキングを疑われることはない。 ・システムの改善を即すため、「この入力でこういうエラーが出ましたよ」と教えてあげてもいい。 このように、思います。

noname#246835
質問者

お礼

回答ありがとうございました。 パスワードやIDを入力する際には、気をつけます。

回答No.2

>SQLの実行等を詳しく回答していただければ幸いです。 そうじゃなく、インジェクションにならないように エスケープ処理を通常行うので、使用者は気にしなくていいんです。 それをしてないのは、「自由に破壊してください」と 言ってるようなもので、サイト側の問題ですからね。 https://okwave.jp/qa/q9803221.html これの続きでしょうか。 「万が一という事ですので不安です。」 先ほども言いましたが、不安になる必要があるのは、 あなたではなく「相手」ですよ。 鍵を開けっぱなしで出かけたところを あなたが、見つけた。。的なものです。

noname#246835
質問者

お礼

ありがとうございました。 少し安心しましたが、入力する際には気をつけます。

関連するQ&A

  • IDもしくはパスワードに空白があった場合。

    IDやパスワードを入力する際に、 空白があった場合、SQL面では大丈夫でしょうか? 例えば、IDが「redorangeblue」が 「red or angeblue」と誤入力して、パスワードに何も入れずログインボタンを押した場合です。 回答をお願いします。

  • ダブルコーテーションやシングルコーテーション

    私の持っている参考書の中に、次のように、 変数をダブルコーテーション、シングルコーテーション、およびピリオドで囲んでいるSQL文があるのですが、 この場合、なぜ、ダブルコーテーション、またはシングルコーテーションのみでは駄目なのでしょうか? [参考書の記載] where カラム名>="'.変数.'" ※変数は日付が入ります。varchar型です。

    • ベストアンサー
    • MySQL
  • パスワードとIDを複雑にしたい。

    自分のIDとパスワードを記号を入れたいのですが、少しSQLの面で不安です。 例えば自分のIDが「1234abcd」だとします。 この場合、IDを「1234abcd7--」とハイフン2つ入れて、 パスワードを「1a2b3c」を「1a2b3c'12--okw-&#&'mg;」としたいですが、 これはSQL注入攻撃が成立してしまう恐れはありますか? また、もし間違えて「1234abcd--'」あるいは「1234abcd'--」を入れて、なおかつ「1a2b3c'12--okw-&#&'mg;」と入力してログインする際も、SQL注入攻撃となってしまうのでしょうか。 大変不安です。回答をよろしくお願いします。 また、実行コードも書いて解説してくれれば助かります。

  • IDとパスワードを間違えてしまったら

    間違えてIDのところにパスワードを入力してしまい、それに気付かずログインボタンをクリックしたら、セキュリティ上問題ありますか?

  • IDやパスワードをブラウザが覚えているのは?

    あるホームページで会員としてログインする時、特に「IDを覚える」と言うチェック欄がない場合でも、クリックすればID、パスワードを ブラウザが覚えていて、●●●のように自動的に入力されます。。これはなぜですか? 覚えさせないようにしたり、あるいは新しいIDを覚えさせる為にはどのような作業をすれば良いでしょうか? 宜しくお願い致します。

  • ログインのIDが表示される!

    たとえばこのGOOにログインするときに、ID入力欄をクリックするとGOOにかぎらずこれまで入力した様々なIDが全部表示されてしまいます。パスワードまでは出ませんが気分が良くないので、これを出ないようにするにはどうすればいいのでしょうか?

  • シングルクォーテーションの変換

    VB6からOracle9iのテーブルにシングルクォーテーション(半角)を含む文字列を登録する場合に、よく行われる変換方法は何がありますでしょうか? (1)シングルクォーテーションを取り除く (2)全角文字に置き換える (3)SQL文を変換しDBに登録できるようにする (3)の場合、使用される関数が載っているホームページがありましたらご教授のほどよろしくお願い致します。

  • id manager の使い方

    windows 7 で id manager を使用する際の使い方マニュアルに従って、 id manager の 「title」 「account id」 「password」 「url」を入力して url アイコンをクリックして 当該サイトのログイン画面に移動して id ボックスのところにカーソルを合わせてクリックし、 id manager の画面に戻って一括貼り付けボタンをクリックする・・・となっていますが、 一括貼り付けボタンをクリックしても 当該サイトのログイン画面の id ボックスや password ボックスに id manager に 入力した情報が反映されません。 よろしくご指導下さい。

  • 公共のパソコンでのIDなど

    公共のパソコンからウェブ上のgooのメールを見るときなんですが。 ここで質問をするときもそうなんですが、一度ログインすると パソコンのほうがIDを覚えているらしく、IDを入力する欄をダブルクリックすると、かつてログインしたIDが出てきてしまうんです。 それをクリックするとパスワードまで全部入力された状態になってしまいます。 マウス一つで誰でも操作できるようになっていて困っています。 公共のパソコンで自分のIDやパスワードが他人に知れないようにするにはどうしたらいいですか?

  • SQLでの「'」 シングルクォーテーションについて

    これらは検索する際の攻撃文字列なのでしょうか? 「ニッチロー' OR キンタロー。」 「'」(シングルクォーテーションだけ) 「The hogehoge union select this osenbei.」 「ああ、下手こいた~ or z=z」 「or z=z」 ※ 特に or z=z はシングルクォーテーションもセミコロンもハイフン無しです。 検索フォームにて入力する際の文字列です。 ※試すつもりはありません。

専門家に質問してみよう