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

ユーザー入力、dbに送信する前にクリーンアップおよびサニタイズします

    まず、テキストを論理的かつクリーンに保ちます:

    trim() -- OK
    htmlentities($comment, ENT_NOQUOTES)  -- No; do later
    mysqli_real_escape_string()  -- Yes; required by API
    nl2br()  -- No; see below
    

    これらの推奨事項の背後にあるロジック:データベース内のデータは単なるデータである必要があります。 htmlentitiesではなく、br-tagsではありません。ただし、PHPからMySQLにデータを渡すには、escape_stringを実行する必要があります。エスケープは保存されません。

    しかし...それは中間のステップにすぎません。データはどこから来たのですか?古いバージョンのPHPは、HTMLで問題なく機能するエスケープやその他のジャンクを追加することを「保護」しようとしますが、MySQLを台無しにします。このような魔法のエスケープをオフにして、生データを取得します。

    データはどこに送られますか?おそらくHTML? SELECTingの後 データをテーブルから戻し、次に 最初にhtmlentities()を実行します および(オプションで)nl2br();

    <I>のようなものを保存することを期待している場合は注意してください (斜体の場合)、あなたはトラブルを求めています-大きなトラブル。ハッカーがする必要があるのは<script> ...だけです あらゆる種類の不快感をWebページに注入し、場合によってはシステム全体に注入します。



    1. SCOPE_IDENTITY()を使用して、同じスコープで最後に挿入されたID値を返します(SQL Server)

    2. ORA-01460:実装されていない、または不当な変換が要求されました

    3. Android用JDBCとWebサービス

    4. オペランドには1つの列が含まれている必要があります-MySQLはありません