7

Possible Duplicate:
Best way to stop SQL Injection in PHP

If I were to use the $_GET function to retrieve a variable from the URL how can I make it hack proof? Right now I just have addSlashes, what else should I add?

$variable1 = addslashes($_GET['variable1']);
//www.xxxxx.com/GetTest.php?variable1=xxxx
4

4 に答える 4

21

$ _GETだけでなく、$ _ POST、$ _ FILES、およびディスクやストリームから読み取るすべての入力を含む最初のルールは、常に検証する必要があります。

今、あなたの質問にもっと詳しく答えるために、あなたはこの世界に存在するいくつかのハックを持っています。いくつかお見せしましょう:

XSS注射

$ _GETなどのURLからデータを受け入れ、可能なタグを削除せずにこのデータを出力すると、サイトがXSSインジェクションまたはコードインジェクションを起こしやすくなる可能性があります。例えば:

http://myhoturl.com/?search=<script>window.location.href="http://thisisahack.com/"</script>

これはあなたのサイトにハックを出力し、人々は別のページにリダイレクトされます。このページは、資格情報を盗むためのフィッシング詐欺の試みである可能性があります

SQLインジェクション

アプリケーションにSQLを挿入することが可能です。例えば:

http://myhoturl.com/?search=%'; UPDATE users SET password=MD5('hello'); SELECT * FROM users WHERE username LIKE '%

SQLは次のようになります。

SELECT * FROM articles WHERE title LIKE '%%'; UPDATE users SET password=MD5('hello'); SELECT * FROM users WHERE username LIKE '%%';

したがって、すべてのユーザーのパスワードをHelloに更新してから、一致しないものを返します。

これは、SQLインジェクションでできることの簡単な概要です。身を守るために、mysql_real_escape_stringまたはPDO、あるいは適切なDB抽象化レイヤーを使用してください。

コードインジェクション

多くの人は、ディスクのどこかからのデータを含めて、ファイルのアップロードを許可することを好みます。例えば:

//File igotuploaded.txt
<?php echo 'helloworld'; ?>

また、URLを使用すると、ファイルを名前で含めることができます。?show = myhotfile.txt

//In this file we include myhotfile.txt
include($_GET['show']);

その人がそれを?show = ../ uploads / igotuploaded.txtに変更すると、echo'Helloworld'が実行されます。

それは危険です。

経験則...ユーザー入力を信頼しないでください。常に検証、防止、検証、修正、検証、そして再度修正してください...

幸運を

于 2011-12-30T20:36:18.893 に答える
5

それはあなたがそれで何をしようとしているのかに完全に依存します:

データをどうするかを知らなければ、何が安全になるかを言うことは不可能です。

于 2011-12-30T20:28:24.257 に答える
3

ユーザー入力を使用するときに直面する2つの最大のリスク(HTTPリクエストはユーザー入力としてカウントされます)は次のとおりです。

リスクと防御についてよく理解しておく必要があります。これらの脅威のそれぞれに対する防御は異なります。addlashes()の使用は、完全な防御ではありません。

安全なWebプログラミングについてさらに学ぶための優れたリソースは、OWASPトップテンプロジェクトです。

SQLインジェクションの神話と誤謬についてのプレゼンテーションを行いました。お役に立てば幸いです。

于 2011-12-30T20:35:54.037 に答える
-1

$ _GET変数を生で読み取ることは危険ではありません、

危険は通常、SQLインジェクション内にあります。

例えば:

$_GET["variable1"] = "' OR 1=1 --";

クエリで:

mysql_query("SELECT userid FROM user WHERE password='".$_GET["variable1"]."';");

これを防ぐには:

$safe_input = mysql_real_escape_string($GET["variable1"]);
mysql_query("SELECT userid FROM user WHERE password='".$safe_input."';");
于 2011-12-30T20:30:58.487 に答える