

超初心者です。データベースに登録するのにシングルクオーテーションが入ってるとエラーが出ます。どうしたらシングルクォーテーションが有効にできますか？


CC BY-SA 3.0
2017-07-17T02:12:58.807
36435
2017-07-18T00:18:25.680
24415
question
java mysql
データベースでシングルクォーテーションを有効にするには？

[code]

    sql = "SELECT * FROM tbl WHERE name = '" + param +"'";
    
[/code]

こういうコードで、`param`にシングルクオーテーションを含んだ文字列、例えば`123'456`が入っていると、生成されるSQLは

[code]

    SELECT * FROM tble WHERE name = '123'456'
    
[/code]

となってしまい構文エラーとなります。文字列連結ではなく`format`を使った場合でも同様です。

構文エラーならいいのですが、`param`が`' OR 1`だと意図しない結果を招きます。これがいわゆるSQLインジェクション脆弱性です。

これを防ぐには、

ｰ プレースホルダを用いたバインド機構を使う  
\- SQLを組み立てる際に文字列リテラルとして正しい形になるようエスケープする

のどちらかが必要です。

また、そのほかにもプログラムからRDBMSを利用するときには注意すべきことがありますので、まずはIPAの「安全なウェブサイトの作り方」
(<https://www.ipa.go.jp/security/vuln/websecurity.html>
)の別冊、「安全なSQLの呼び出し方」を読んでみてください。


CC BY-SA 3.0
2017-07-18T00:18:25.680
36458
2017-07-18T00:18:25.680
5793
36435
answer