Mariadb-sql-injection-protection

提供:Dev Guides
移動先:案内検索

MariaDB-SQLインジェクション保護

ユーザー入力を受け入れるという単純な行為は、悪用の扉を開きます。 この問題は主にデータの論理管理に起因しますが、幸いなことに、これらの主要な欠陥を回避することはかなり簡単です。

SQLインジェクションの機会は通常、ユーザーが名前などのデータを入力するときに発生し、コードロジックはこの入力の分析に失敗します。 コードではなく、攻撃者がデータベースで実行されるMariaDBステートメントを挿入できるようにします。

ユーザーが入力したデータを常に考慮し、疑わしく、処理の前に強力な検証が必要です。 パターン検証を通じてこの検証を実行します。 たとえば、予想される入力がユーザー名の場合、入力する文字を英数字とアンダースコアに制限し、特定の長さにします。 以下に示す例を確認します-

if(check_match("/^\w{8,20}$/", $_GET['user_name'], $matches)) {
   $result = mysql_query("SELECT * FROM system_users WHERE user_name = $matches[0]");
} else {
   echo "Invalid username";
}

また、入力制約の作成には、REGEXP演算子とLIKE句を使用します。

などの入力の必要な明示的な制御のすべてのタイプを考慮します-

  • 使用するエスケープ文字を制御します。
  • 入力用の特定の適切なデータ型を制御します。 入力を必要なデータ型とサイズに制限します。
  • 入力データの構文を制御します。 必要なパターン以外は許可しないでください。
  • 許可される条件を管理します。 ブラックリストSQLキーワード。

インジェクション攻撃の危険性を知らない場合や、取るに足らないものとみなす場合もありますが、セキュリティ上の懸念のリストの上位にあります。 さらに、これらの2つのエントリの効果を考慮してください-

1=1
-or-
*

これらのいずれかを正しいコマンドと一緒に入力できるコードは、データベース上のすべてのユーザーデータを明らかにしたり、データベース上のすべてのデータを削除したりする可能性があります。 場合によっては、攻撃者は穴の調査に時間を費やすことさえしません。単純な入力でブラインド攻撃を実行します。

また、MariaDBと組み合わせたプログラミング/スクリプト言語によって提供されるパターンマッチングおよび正規表現ツールを検討してください。これらのツールは、より多くの制御を提供し、時にはより良い制御を提供します。