PHP:文字のエスケープ:「\」:addslashes
PHP (55 items)
2005年07月29日
PHPは、使っててさすがWEB用言語やなと思わされる事が多々あります。
例えば、HTMLの特殊文字変換なんか。
一昔前なら、各言語毎に共通関数的に自前で関数作ってた訳ですが、
こういう、WEBシステムには必須な関数がデフォルトで用意されてるわけです。
>htmlspecialchars関数
>htmlentities関数
で、他にも必須な処理がありますが、
SQL発行する際に必要な「'(シングルクォーテーション)」とかの文字。
SQLインジェクション攻撃を回避する為に、これらの文字はエスケープしたいところですが、
そういう関数も当然ながら用意されてます。
で、当然ながら、これを元に戻す関数もあるわけです。
更に、こんな関数使うまでも無く、
GETやPOSTで送信された値は、php.iniの設定で自動でエスケープしてくれます。
俺ら何もせんでええやん。
・・・、という訳ではないですね。
これらの関数やらphp.iniの設定をうまく使って、
SQLインジェクションに代表される、WEBシステムには付きものの、
「外からの不正攻撃」を防ぎたいところです。
例えば、HTMLの特殊文字変換なんか。
一昔前なら、各言語毎に共通関数的に自前で関数作ってた訳ですが、
こういう、WEBシステムには必須な関数がデフォルトで用意されてるわけです。
>htmlspecialchars関数
>htmlentities関数
で、他にも必須な処理がありますが、
SQL発行する際に必要な「'(シングルクォーテーション)」とかの文字。
SQLインジェクション攻撃を回避する為に、これらの文字はエスケープしたいところですが、
そういう関数も当然ながら用意されてます。
addslashes関数
データベースへの問い合わせなどに際してクォートされるべき 文字の前にバックスラッシュを挿入した文字列を返します。クォート されるべき文字とは、シングルクォート('), ダブルクォート("),バックスラッシュ (\) ,NUL (NULL バイト) です。
で、当然ながら、これを元に戻す関数もあるわけです。
stripslashes関数
バックスラッシュが取り除かれた文字列を返します。(\' が ' になるなど) 2つ並んだバックスラッシュは1つのバックスラッシュになります。
更に、こんな関数使うまでも無く、
GETやPOSTで送信された値は、php.iniの設定で自動でエスケープしてくれます。
magic_quotes_gpc
GPC(Get/Post/Cookie)処理に関するmagic_quotesの設定を行います。 magic_quotesがonの場合、'(シングルクオート)、"(ダブルク オート)、\(バックスラッシュ) 、NULLには全て自動的にバックスラッ シュでエスケープ処理が行われます。
俺ら何もせんでええやん。
・・・、という訳ではないですね。
これらの関数やらphp.iniの設定をうまく使って、
SQLインジェクションに代表される、WEBシステムには付きものの、
「外からの不正攻撃」を防ぎたいところです。
前の記事 次の記事
この記事に関連した過去記事一覧は画面下にあります。
Comments
コメントは、まだ書かれていません
Add Comments
Trackback
てくてく糸巻き wrote:
メモ:ちと勉強:
stereolog調整中の、PHPの勉強(かなり初心者ですw)
2006年06月25日 17時15分49秒
Trackback URL
http://www.res-system.com/weblog/action.php?action=plugin&name=TrackBack&tb_id=502