Ads by Google
新しい記事を書く事で広告が消せます。
WEBアプリケーション内で値をページ間で持ちまわす方法はいくつかあります。その中でもよくあるのがセッションを使うものです。
セッションとはユーザーに一時的なパスワードを発行し、そのパスワードを確認してサーバーに保存されているユーザー固有の情報を利用させるものです。パスワードはセッションIDと呼ばれます。セッションIDはクッキーに保存することが多いですが、クッキーが使えないときはURLの中に追加してGETで回します。
ということは、このセッションIDをクラッカーに見破られるとそのセッションの持ち主を詐称されてしまうわけです。これがセッションハイジャックです。
セッションIDを連番など推測しやすいものにしていると、この攻撃を受ける可能性が高くなるため、セッションを利用する場合は予測困難なセッションIDをユーザーに出すことが大事です。php付属のセッション関数を使えば簡単です。
もしセッション関数では仕様に合わない場合はmd5()などの暗号化関数を利用して自分で暗号化します。
また、同じセッションIDを使い続けていると盗まれる可能性が高くなるため、保持する情報の重要性に応じて有効時間(ライフタイム)を設けておくことも大事です。たとえば銀行のシステムですと、盗まれては大変なことになるため30分以下の値が設定されていることが多いです。みん動の場合は個人情報、機密情報などの重大な情報は持たないためセッションIDの寿命はとても長くなっていますが、これは例外です。
phpのセッション関数を使っているなら、session_cache_expire (30);で30分に出来ます。デフォルトは3時間です。
さらにセキュアにしたいならsession_regenerate_idをつかえばセッションIDをワンタイムパスワードのようにできます。ただしつくりによっては画面遷移次第で誤動作を起こしてしまうので注意が必要です。
セッションハイジャックの方法には予測の他に盗聴がありますが、これは通信の暗号化によって対抗することが出来ます。SSLの利用するわけです。漏洩がシリアスな結果を生む情報を取扱う場合は暗号化を利用するのが適切です。
ちなみに特にセキュリティの重要性が高い銀行のWEBシステムは、SSLによる通信暗号化+短いセッション有効時間がほぼ必ずと言っていいほど使われています。さらに+αとしてワンタイムパスワードや電子証明書、専用回線の利用が行われることがあります。
$filename = $_POST["filename"] $shell="rm -rf $filename"; exec($shell);
このようなコードだと、もしfilenameに「hoge|| rm -rf /」とあった場合、最悪PHPから操作可能なファイルのほとんどが削除される可能性があります。
そのため
| & `` $ < >
の文字はサニタイズするか、存在を確認したらエラーにするようにします。あるいは想定していた値以外であればエラーにするといった処理をしてもいいでしょう。
ただ、exec()にユーザーの入力を使わないのが一番確実です。
外部入力のデータをSQLに埋め込んで使うことは良くあります。たとえばユーザー認証にSQLを発行するようなケースです。
このとき、ユーザーから入力された内容をそのまま利用してはいけません。たとえば下記のようなコードです。
$pass = mysql_escape_string($_POST["pass"]); $sql="select id , username where pass = $pass"このとき、$_POST["pass"]に
"4 OR 1=1"と入力がなされていると、PHPの設定次第ではこのようなSQLが生成されます。
select no,username where pass= 4 OR 1=1
このSQLが発行されると、全てを返してしまいます。そのため、まずSQL文は値を「'」でかこんで
$sql="select id , username where pass = '$pass'"
という形にします。ただしこれだけでは、$IDに [1' OR 1='1]と入力されているとこのようなSQL文が生成されてしまうため
select no,username where pass='4' OR 1='1'
同じことになります。
そのため値のサニタイズもあわせて行う必要があります。MYSQLならmysql_escape_string()、PostgreSQLならpg_escape_string()が利用できます。ADODB、PEARDBなどを使っているなら、サニタイズ関数がありますからそちらを使うと良いでしょう。
tag : php セキュリティ SQLインジェクション
昔のフォルダをあさっていると、およそ2年前(06/08/27)に書いたセキュリティに関してのメモが見つかりました。もともと後輩の教育用に作っておいたメモなのですが、残念ながら諸事情により使われなかったものです。
今でも使えると思いますから公開したいと思います。
第一回はクロスサイトスクリプティングです。
悲しいかなWEB上にいる人たちの中にはクラッキングを試みる人も存在します。そういった人たちから大事なサービスを守るため、ふだんからセキュリティを意識した開発を行うことが重要です。
クラッカーがWEBアプリケーションに対して攻撃を掛けてくる方法は大きく分けて2つあります。サーバーを直接クラックするタイプと、WEBアプリケーションの脆弱性をつくタイプです。
今回はWEBアプリケーションの脆弱性をつくタイプに話題を絞り、その手法と対応策について述べてみたいと思います。
tag : クロスサイトスクリプティング php セキュリティ XSS
みんなの動画サーチ 現在の人気動画