サニタイジング

Web覚書

sanitizing=消毒、衛生的にする
入力フォームの内容をチェックし含まれる有害な文字・文字列を検知し、無害化するサニタイズ処理。
有害な文字・文字列としてはHTMLタグやjavascript、SQLコードなど。
HTMLタグやjavascript、SQLコードを実行してしまうリスクを回避する。

無害化する
代表的なのが、文字・文字列を元の表記と同じ意味を持つ別の表記に置き換えるエスケープ処理。
エスケープによる対処が難しい場合は、対象のプログラムを削除することも。

HTMLタグ
の「<」「>」の部分をそれぞれ「<」「>」にエスケープすると、「<br>」となり、受け取ったデータがWebアプリケーションにとって意味を持つ
であっても、特別な意味を持たない単なる文字列になる。

JavaScript
サニタイジング用の関数はないが文字列を置換する関数を定義してサニタイジングを実施することは可能。


function htmlentities(str){
  return String(str).replace(/&/g,"&")
    .replace(//g,">")
    .replace(/"/g,""")
}

PHPのhtmlspecialchars関数
JavaScriptとは違い、独自に置換関数を定義する必要がない。


htmlspecialchars($str, ENT_QUOTES, ‘UTF-8′);


$str
入力された文字列を設定
ENT_QUOTES
「<」や「>」「'」「"」を置換するルール
‘UTF-8′
サニタイジングされた文字列の文字コードを指定

SQLでプリペアードステートメント
SQLはプリペアードステートメントを利用。
SQL実行前にSQL文をコンパイルし、実行時にパラメータ変数に値を当てはめる。


$stmt = $dbh->prepare('SELECT * FROM users WHERE name = :name');

prepare()を使う。括弧の中にSQL文を入れると、それがあらかじめ準備(プリペアー)された文章となる。
末尾の「:name」に具体的なデータが入ることで、初めてSQL文が完成。

タイトルとURLをコピーしました