sql >> データベース >  >> RDS >> Mysql

正しくサニタイズ/エスケープしますか?

    何らかの理由で、バックスラッシュをエスケープする
    つまり、適切なコードは次のようになると思います

    if(isset($_GET['q'])){
      $_GET['q'] = trim($_GET['q']);
      if(strlen($_GET['q']) >= 2){
        $q = $_GET['q'];
        $q = '%'.addCslashes($q, '\%_').'%';
        // now we have the value ready either for escaping or binding
        $q = mysql_real_escape_string($q);
        $sql = "SELECT name, age, address FROM book WHERE name LIKE '$q'";
        //or 
        $sql = "SELECT name, age, address FROM book WHERE name LIKE ?";
        $stm = $pdo->prepare($sql);
        $stm->execute(array($q));
        $data = $stm->fetchAll();
      }
    }
    

    出力には、

    を使用します
    echo htmlspecialchars($_GET['q']);
    

    ここではストリップスラッシュは必要ありません。

    魔法の引用符は、使用しない場合でもセキュリティに悪影響を与えることはありません。
    文字セットは、非常にまれなエンコーディングの場合に危険ですが、正しく設定されていない場合に限ります。 mysql(i)_set_charsetの場合 またはDSN(PDOの場合)が目的に使用されました-あなたは再び安全です。

    PDOについては、タグウィキ 初心者には十分なはずだと思います




    1. SELECTINTOOUTFILEはファイルに書き込めません

    2. MySQLは、外部キーを無視して、すべてのテーブルを削除します

    3. MySqlは、フィールドの値がコンマで区切られているテーブルから一意の単語のリストを取得します

    4. postgresqlでデータベースのユーザーを作成するにはどうすればよいですか?