掃除と都道府県リスト。あとちょっとだったのにいいいい。
2時間目
実習となり、偶数のヒントが宿題九九2問目と判明。やたーできたー!
くわっちょこぼれ話のお勧めセキュリティはESET Smart Securityだよん。
ネタバレだけど自分用に。
<html> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <head><title>都道府県リスト</title> </head> <body> <?php $pref =array("▼都道府県を選択してください","北海道","青森県","岩手県", "宮城県","秋田県","山形県","福島県", "茨城県","栃木県","群馬県","埼玉県", "千葉県","東京都","神奈川県", "新潟県","富山県","石川県","福井県","山梨県", "長野県","岐阜県","静岡県","愛知県","三重県","滋賀県","京都府","大阪府", "兵庫県","奈良県","和歌山県","鳥取県","島根県","岡山県","広島県","山口県", "徳島県","香川県","愛媛県","高知県","福岡県","佐賀県","長崎県","熊本県", "大分県","宮崎県","鹿児島県","沖縄県"); ?> <table border=1> <caption>都道府県リスト</caption> <tr> <?php foreach ($pref as $key => $value) {?> <?php if (($key%2) ==0){?> <td> <?php echo $key?> </td> <td> <?php if (($key%2) ==0){?> <?php echo $pref[$key]?> <?php }?> <?php }?> </td> </tr> <?php }?> </table> </body>
3時間目
クロスサイトスクリプティングテスト つづりはCross Site Scriptingだそうな。
ながーい解説はクロスサイトスクリプティング対策の基本(前編)を参考にどぞ。
一応リンク先にもあるけど補足。
※クロスサイトスクリプティング脆弱性のことを「XSS」と表記するのは、
「Cross Site Scripting」の略であるから「CSS」と表記したいけど、
「Cascading Style Sheets」の略も「CSS」となり紛らわしいため、
「XSS」と表記する場合が多くなってます。
フォームにはHTMLタグが入れられてしまう。
ウィルスを仕込まれたり、cookieをそのまま盗まれる危険性があるので、
XSS対策を行う必要性がある。
で、対策としては
■関数 htmlspecialchars()を使います。
フォームの中のPOST&GETで入るHTMLタグを変換してただの文字列に変えちゃうのだ。
参考サイト
実例
$xss_text = htmlspecialchars($_GET["user"], ENT_QUOTES,"UTF-8"); $xss_text = $_GET["user"]; echo $xss_text;
これを住所録に関数化してincludeさせよう!
で、こんな感じ。includeはこう。
function hg($str) { return htmlspecialchars($str,ENT_QUOTES,"UTF-8"); }insertで例。
$sei=$_SESSION["sei"] = hg($_SESSION["sei"]);//セッションを受け取る入力した文字列の判定だけできればいいので、使うのはindex、insert、updateだよ~。
ただし、配列ごとの処理が必要なので["mei"]等々もおんなじよーにつけます。
他にも入力フォームつけてるヒトは適宜ヨロシコ。
4時間目
SQLインジェクション
【' OR ''='】をフォームに入れると、入っているデータが全部出てしまう。
【''='】はどんな条件でも架空のカラムが存在しないなら、すべて引き出せてしまう。
mixiアプリの実例も記憶に新しいところですが、マジ怖い。
//エスケープ処理前 //$sql="SELECT * FROM sql_esc WHERE pass='".$request."'"; //エスケープ処理後 $sql = sprintf("SELECT * FROM sql_esc WHERE pass = '%s'", mysql_real_escape_string($request));
未対処は
SELECT * FROM sql_esc WHERE pass='' OR ''=''
のあとにデータがだ~~~と出てきます。
実際に対策すると
SELECT * FROM sql_esc WHERE pass = '\'\' OR \'\'=\'\'
って意味のない文字になる
実践的で100%じゃないけどいい感じのところ
MySQL mysql_real_escape_stringでSQLインジェクションを防ぐ
おまけ
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd">これって何?
DOCTYPE宣言と言うそうな。
HTMLには複数のバージョンがあり、文法や用法がバージョンごとに違いが出ています。
そのため、どのバージョンで作成されたか宣言が必要なのです。
まあHTML5を使うときはこのDOCTYPE宣言も代わるけど、いまは深く考えなくていいと思います~。