忍者ブログ

からすまる日誌

2020012403 プレースホルダ

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2020012403 プレースホルダ

セキュリティ対策
・バリデーション(データがバリッドかインバリッドか)
・サニタイズ処理(無害化)
 
PDOが担っているのが「サニタイズ」 
メインの理由はSQLインジェクション
受け取った文のなかにSQL文があるとあぶなかしい
SQL文込みでなにか送るとなるともっとあぶなかしい
→サニタイズする必要がある
 
しかもすり抜ける方もいろいろやるので
文字コードをアラビア文字にするとかいろんな思いもつかない方法でやってくる
もう個人でやるものじゃないよね
PHPのバージョンが急遽挙げられて、PDOオブジェクトが加わった
PDO自体がサニタイズのためにあるといっていい
 

攻撃者はprepareをとりわけ使いたい
prepareで生成されるSQL文
 
平文のSQL文をprepareすると、
プリペアドステートメントになる
構文としてプリペアする。データを入れる前にいったんコンパイルする、らしい。
 
SQLの構文だけをコンパイルする。0と1だけになる。そこに普通文字情報が混じるわけがない。
そこにバインドしようという発想だとかなんとか。
 
prepareを使わないとPDOの意味がないらしい
混ざるおそれがないものはクエリーメソッドですむらしい
 

小麦粉を練ってるときにどくがまじるとやばい
先にパンを焼いておけばいい
パンに穴をあけておいてトッピング(値)をあとでバインド(あなぽこにはめる)をすれないい
複数あなぽこがほしいときはコロンをつければ穴ぽこ複数だなととられる
あなぽこをカッコよく言うとプレースホルダと呼ばれる
 
プレースホルダ(名前付きの穴)にしたうえで事前コンパイルをする
 

本来2行ですむがSQLインジェクションを回避するためにこれらを長く記述する必要があるらしい 
 
なんのことかひとつもわからないな

なお、いまのコードだと生徒名登録の後真っ白画面になる
処理をする画面に滞留してはいけないという法則がある
 
students_form.php
→insert_s.php
ここで処理が終わったら即座にリダイレクトしたい
 
header関数を使う
ロケーションの冒頭は大文字でLocationでないといけない
コロン
必ず半角スペースをいれる
 
 header("Location: students_form.php");
 
正しくは相対パスまたは絶対パスでファイル名を記す
とりあえずほかにページがないので、元のページに戻るようにしましょう
 
まるで何も起こらなかったように見えるが、
 
みると登録されている
 
--->insert_s.php
 
<?php
 //var_dump($_POST);
 //print_r($_POST);
 //echo $_POST["s_name"];
 
 //-------------------------
 //DBへの接続情報
 //環境に応じて書き換えてください
 //-------------------------
 
 $user = "root";
 $pass = "";
 $host = "localhost";
 $dbname="school";
 //-------------------------
 $dsn = "mysql:host={$host};dbname={$dbname};charset=utf8";
 $pdo= new PDO($dsn, $user, $pass);
 $sql="INSERT INTO students(s_name) VALUES (:s_name)";
 //$pdo->prepare($sql);//上の一行をプリコンパイルする//穴だけあけて生地を用意した
 $stmt = $pdo->prepare($sql);//パン生地を焼いた(コンパイル済みのバイナリデータになっている)
 $stmt->bindValue(":s_name",$_POST["s_name"],PDO::PARAM_STR);//(バイナリデータとテキストデータが混じることはないので毒があっても回らない)
 //$pdo->query($sql);//これはもう使えないので、
 $stmt->execute();//実行
 header("Location: students_form.php");
?>
  

次にselectの処理をさせる
--->students_list.php
 
<!DOCTYPE html>
<html lang="ja">
<head>
 <meta charset="utf-8">
 <title>生徒一覧</title>
 <link rel="stylesheet" href="css/style.css">
 <script src="../jquery-3.4.1.min.js"></script>
</head>
<body>
 <h1>登録済み生徒一覧</h1>
 <div id="container">
  <table>
   <tr>
    <th>ID</th><th>生徒氏名</th>
   </tr>
  </table>
 </div>
 
 <script src="js/list.js"></script>
</body>
</html>
 
--->list.js
 
$(function(){
 console.log("hogehoge");
});
 
PR

コメント

ブログ内検索

カレンダー

03 2025/04 05
S M T W T F S
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30