PHP防止sql注入小技巧のsql前処理


sqlの前処理は、変数パラメータを使用してカスタマイズできる、実行したいSQLのコンパイルされたテンプレートと見なすことができます.
どのようなメリットがあるか見てみましょう.
  • 前処理文は分析時間を大幅に短縮し、1回のクエリーのみを行いました(文は複数回実行されますが).
  • バインドパラメータはサーバ帯域幅を減少させ、文全体ではなくクエリーのパラメータを送信するだけです.
  • 前処理文は、パラメータ値が送信された後に異なるプロトコルが使用され、データの正当性が保証されるため、SQL注入に非常に有用である.

  • このような前処理は、2つの方法で、私たちが今回言うのはmysqliです.いつでも、PDOよりもアプリケーションが同じデータ・アクセス・モードで使用できることを保証します.
    前処理では、dml文とdql文の2つの文があります.まず最初の方法を見てみましょう.
    query('set names utf8');
    
    $insert = $mysqli->prepare("insert admins (title,cookies,sta,lid) values (?,?,?,?)");
    $title = "cuijinpeng";
    $cookies = "luyaran201314";
    $sta = "1";
    $lid = 1;
    
    $insert->bind_param("sssi",$title,$cookies,$sta,$lid);
    $res = $insert->execute();
    if($res){
        echo 1;
    }else{
        echo $insert->error;
        echo 0;
    }
    
    $insert->close();
    $mysqli->close();

    2つ目は、コードは次のとおりです.
    query('set names utf8');
    
    $select = $mysqli->prepare("select id,title,cookies,sta,lid from admins where id > ?");
    $id = "1";
    $select->bind_param("i",$id);
    $select->bind_result($id,$title,$cookies,$sta,$lid);
    $select->execute();
    
    while ($select->fetch()) {
        echo $id."---".$title."---".$cookies."---".$sta."---".$lid."
    "; } $select->close(); $mysqli->close();

    次に、この2つの文がそれぞれどのようなsqlをサポートしているかを見てみましょう.
    1つ目はinsert、update、deleteの3種類のsqlをサポートし、2つ目はクエリー文です.
    終わったbind_paramのiは、私たちがパラメータを入力するタイプです.具体的には以下のように紹介します.
  • i-integer(整数)
  • d-double(デュアル精度浮動小数点型)
  • s-string(文字列)
  • b-BLOB(binary large object:バイナリオブジェクト)
  • 各パラメータにクラスを指定する必要があります.これにより、データベース・パラメータのデータ型を教えることで、SQL注入のリスクを低減できます.
    はい、今回の記録はここまでです.
    いい感じだったら、応援よろしくね..