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

Mysqlのユーザー入力をサニタイズする方法としてのBase64

    「サニタイズ」しないでください SQLインジェクションを防ぐ手段としての入力- プレースホルダーを使用する (または適切なエスケープ) 、 いつも。一貫性を保つ。安全を確保してください。問題はすでに解決されています。

    ドメインが制限されているため、このケースは「安全」です base64_encode 関数。 ただし..

    悪い習慣とbase64でエンコードされた値の保存(表示されたクエリが機能するように)には、いくつかのネガティブ 変更による影響 保存された情報:破棄 値の順序により、情報は簡単に検索できなくなります追加が必要です 「エンコード/デコード」ステップ、さらには消費 より多くのスペース-痛い!

    したがって、base64でエンコードするデータには特定のケースがあるかもしれませんが、このアプローチはではありません。 SQLインジェクション を軽減する手段として最適です。 。

    この問題は、テキストプロトコルを介してSQLにアクセスすることが原因です。 ここで、クエリコマンド/形状と 混合されています。 正しいの使用 エスケープテクニック(例: mysql_real_escape_string )SQLテキストが解析されるように情報がエスケープされるようにすることで、これを修正します。 意図したとおりですが、base64エンコードの手順とは異なり、は実行しません。 提供される情報を実際に変更してください!

    この正確に プレースホルダーが提供するもの !プレースホルダーは 普遍的に正しいアプローチであり、奨励されるべきです。プレースホルダークエリと値の送信を許可しますデータベースに個別に ライブラリ/データベースでサポートされている場合。それ以外の場合はエスケープすることでエミュレートされます。プレースホルダーの正しい使用法は排除 SQLインジェクションと、SQLコマンドテキストに値を混在させるためのユーザーコードの必要性。これにより、クエリの記述と保守も容易になります。

    「個々のプログラマー」がひどいクエリを書くのを防ぐための解決策は、防止することです。 アドホッククエリがコード内に散在しないようにする:データアクセス操作をデータアクセス層に収集します( DAL) (おそらくORMと組み合わせて)関連するアクションのみを公開し、DAL内でSQLを適切に使用できるようにします。より単純なプロジェクトでは、DALは、衛生状態やその他の検証ロジックのビジネスルールを一元管理するのに適した場所でもあります。

    より正確に:

    • サニタイズ ビジネスルールの値。これにより、ユーザー名が短すぎる、文字が制限されている、またはビジネス要件を満たしていないなどの「不正な情報」を防ぐことができます。

    • プレースホルダーを使用する SQLインジェクション を防ぐため 。これは厳密に SQLへのデータの転送に関連しており、SQL内の情報とは関係ありません。

    MySQL5.6.1は FROM_BASE64 、エンコーディングがSQLコマンドテキストで単純に使用されるように、これは追加の明示的なデコードステップを追加し、そのようなエンコーディングスキームを使用する場合のクエリを複雑にします。このbase64アプローチは単純にではありません SQLインジェクションを防ぐための実証済みの手法がすでにあり、最初の質問では提案されなかったため、必要です。



    1. 純粋なvbscriptを使用してmysql5.0データベースに接続しますか?

    2. LaravelでJson列を検索

    3. 警告:mysqli_connect():不明なMySQLサーバーホスト

    4. BigQuery/SQL-特定のバリアントの値を分割