ホームページ  >  記事  >  php教程  >  mybatis の # と $ の違いと SQL インジェクションを防ぐ方法についての簡単な説明

mybatis の # と $ の違いと SQL インジェクションを防ぐ方法についての簡単な説明

高洛峰
高洛峰オリジナル
2017-01-05 17:21:491877ブラウズ

mybatis の # と $ の違い

1. # 受信データを文字列として扱い、自動的に受信するデータに二重引用符を追加します。例: #user_id# で並べ替えます。渡された値が 111 の場合、SQL に解析されたときの値は「111」で並べられます。渡された値が ID の場合、解析された SQL は「id」で並べられます。
2. $ 受信データを直接表示し、SQL で生成します。例: $user_id$ で並べ替え、渡された値が 111 の場合、SQL に解析されたときの値は user_id で並べ替えられます。 渡された値が ID の場合、解析された SQL は ID で並べ替えられます。

3 #この方法により、SQL インジェクションを大幅に防ぐことができます。

4.$メソッドではSQLインジェクションを防ぐことはできません。

5. $ メソッドは通常、テーブル名などのデータベース オブジェクトを渡すために使用されます

6. 通常使用できる場合は、$ を使用しないでください。

SQL インジェクションを防ぐ

注: SQL ステートメントを select * from t_stu where s_name like '%$name$%' として記述します。これはインジェクション攻撃に対して非常に脆弱です。

「${xxx}」形式のパラメータは SQL コンパイルに直接関与するため、インジェクション攻撃を避けることはできません。ただし、動的なテーブル名と列名に関しては、「${xxx}」などのパラメータ形式のみを使用できます。

mybatisのマッピング文を書くときは、「#{xxx}」の形式を使用するようにしてください。 「${xxx}」などのパラメータを使用する必要がある場合は、SQL インジェクション攻撃を防ぐために手動でフィルタリングする必要があります。

<sql id="condition_where"> 
  <isNotEmpty property="companyName" prepend=" and "> 
    t1.company_name like #companyName# 
  </isNotEmpty> 
</sql>


Java コードは元のコードと似ていますが、null と '%' の判定をメソッドにカプセル化するのが面倒だと感じる場合は、何も問題ありません。

上記は、mybatis の # と $ の違いと SQL インジェクションを防ぐ方法についての編集者の簡単な説明です。皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです~


mybatis の # と $ について詳しくは、関連するものをご覧ください。 $ の違いや SQL インジェクションを防ぐ方法に関する記事は、PHP の中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。