- ベストアンサー
シングルクォートの入力ミスによる影響とSQL注入攻撃の可能性
- IDに誤ってシングルクォートが含まれた場合、ログインに影響が出る可能性があります。
- ID入力欄にシングルクォーテーションのみ入力した場合でも、SQL注入攻撃が成立する可能性があります。
- ログイン時には十分な注意が必要であり、シングルクォートの入力ミスによる影響を防ぐためには、適切な入力検証やエスケープ処理が必要です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
このレベルが攻撃になってしまうのは、サイト側に問題がありますので質問者様は気にしないで良いです。 例えば、質問者様が人の家を訪問して、インターホンを鳴らしたところ、住人がそれに驚いてショック死したとして、質問者様が殺人罪になると思いますか? >(※ここで質問した事で、悪用する事は一切ございません) >(※攻撃するつもりも一切ございません) 質問者様が悪用するつもりがなくとも、他の閲覧者もいますので、この注意書きはあまり意味がないように思います。
その他の回答 (2)
- asciiz
- ベストアンサー率70% (6803/9674)
シングルクォート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つの入力程度で、ハッキングを疑われることはない。 ・システムの改善を即すため、「この入力でこういうエラーが出ましたよ」と教えてあげてもいい。 このように、思います。
お礼
回答ありがとうございました。 パスワードやIDを入力する際には、気をつけます。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
>SQLの実行等を詳しく回答していただければ幸いです。 そうじゃなく、インジェクションにならないように エスケープ処理を通常行うので、使用者は気にしなくていいんです。 それをしてないのは、「自由に破壊してください」と 言ってるようなもので、サイト側の問題ですからね。 https://okwave.jp/qa/q9803221.html これの続きでしょうか。 「万が一という事ですので不安です。」 先ほども言いましたが、不安になる必要があるのは、 あなたではなく「相手」ですよ。 鍵を開けっぱなしで出かけたところを あなたが、見つけた。。的なものです。
お礼
ありがとうございました。 少し安心しましたが、入力する際には気をつけます。
お礼
ありがとうございました。 本当に助かりました。