「開発:セキュリティ:SQLインジェクション」の版間の差分

提供:MoodleDocs
移動先:案内検索
35行目: 35行目:
そして、私たちは、SQLと共に配列値 array($lastname, $id) をデータベースに渡します。
そして、私たちは、SQLと共に配列値 array($lastname, $id) をデータベースに渡します。


==What you need to do in your code==
==あなたのコードで、あなたがすべきこと==


In Moodle 2.0
Moodle 2.0
* Use higher level dmllib methods, like get_record, whenever possible, so you do not have to create SQL yourself.
* 可能な場合はいつでも、あなた自身ががSQLを作成する必要性をなくすためにも、get_recordのような高いレベルのdmllibメソッドを使用してください。
* When you have to insert values into SQL statements, use place-holders to insert the values safely.
* When you have to insert values into SQL statements, use place-holders to insert the values safely.


In Moodle 1.9
Moodle 1.9
* Use higher level dmllib methods, like get_record, whenever possible, so you do not have to create SQL yourself.
* Use higher level dmllib methods, like get_record, whenever possible, so you do not have to create SQL yourself.
* Data from required_param and optional_param have already had addslashes applied, ready to be used in database queries, but make sure you put single quotes round each value.
* Data from required_param and optional_param have already had addslashes applied, ready to be used in database queries, but make sure you put single quotes round each value.
48行目: 48行目:
* Test your code by using a tool like [http://sqlmap.sourceforge.net/ sqlmap], or by manually trying tricky inputs like
* Test your code by using a tool like [http://sqlmap.sourceforge.net/ sqlmap], or by manually trying tricky inputs like
  <nowiki>< > & &amp;lt; &amp;gt; &amp;amp; ' \' 碁 \ \\</nowiki>
  <nowiki>< > & &amp;lt; &amp;gt; &amp;amp; ' \' 碁 \ \\</nowiki>


==What you need to do as an administrator==
==What you need to do as an administrator==

2010年2月1日 (月) 21:00時点における版

作成中です - Mitsuhiro Yoshida 2010年1月25日 (月) 16:11 (UTC)

このページは、Moodleセキュリティガイドラインの一部です。

何が危険ですか?

.../course/view.php?id=123 内にある、あなたのコードがURIから渡される「$id = 123」を使って、次のようなSQL文を実行すると想定しましょう。 SELECT FROM mdl_course WHERE id = $id; そして、あなたのコードが、わざわざパラメータを適切にクリーニングしないと想定しましょう。

邪悪なハッカーいより、URLが次のように編集されます:

.../course/view.php?id=123;DELETE+FROM+mdl_user

なぜ、これが非常に、非常に悪いことなのか、私があなたにお答えします。

もちろん、データベースクエリに応じて、悪意のある入力を適切に構築する必要がありますが、邪悪なハッカーにとって、単なる試行錯誤の問題でしかありません。

どのようにして、Moodleはこの問題を回避するのですか?

もう一度、これは、Moodle外部からの入力が非常に疑わしいという例です。上記例では、PARAM_INT から required_param に渡すことで、$idは明確にクリーニングされています。

以下、さらn手の込んだクエリーです: UPDATE mdl_user SET lastname = '$lastname' WHERE id = $id; $lastname が「O'Brian」の場合、どうなるでしょう? そうです、あなたは次のように「'」をエスケープする必要があります: O\'Brian

Moodle 1.9では、required_param または optional_param 経由であなたが取得する入力すべてには、自動的に addslashes が適用されます。

Moodle 2.0では、私たちは、ストリングの連結により作成される、危険SQL処理を完全に回避します。Moodle 2.0のSQLは、以下のようになります。 UPDATE mdl_user SET lastname = ? WHERE id = ?; そして、私たちは、SQLと共に配列値 array($lastname, $id) をデータベースに渡します。

あなたのコードで、あなたがすべきこと

Moodle 2.0

  • 可能な場合はいつでも、あなた自身ががSQLを作成する必要性をなくすためにも、get_recordのような高いレベルのdmllibメソッドを使用してください。
  • When you have to insert values into SQL statements, use place-holders to insert the values safely.

Moodle 1.9

  • Use higher level dmllib methods, like get_record, whenever possible, so you do not have to create SQL yourself.
  • Data from required_param and optional_param have already had addslashes applied, ready to be used in database queries, but make sure you put single quotes round each value.
  • If you have loaded some data from the database, and then want to re-insert it, then apply addslashes or addslashes_object to it first.
  • Test your code by using a tool like sqlmap, or by manually trying tricky inputs like
< > & &lt; &gt; &amp; ' \' 碁 \ \\

What you need to do as an administrator

  • This is not something that administrators can do anything about (other than keeping your Moodle up-to-date).


関連情報

テンプレート:CategoryDeveloper