7

可能重复:
在 PHP 中停止 SQL 注入的最佳方法

如果我要使用 $_GET 函数从 URL 中检索变量,我怎样才能使它防黑客?现在我只有 addSlashes,我还应该添加什么?

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

4 回答 4

21

ANY 输入的首要规则,不仅是 $_GET,即使是 $_POST、$_FILES 以及您从磁盘或流中读取的任何内容,您都应该始终验证。

现在要更详细地回答您的问题,您在这个世界上有几个 HACK。让我给你看一些:

XSS 注入

如果您接受来自 URL 的数据,例如来自 $_GET 的数据,并在不去除可能的标签的情况下输出此数据,您可能会使您的网站容易受到 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 或任何好的数据库抽象层。

代码注入

许多人喜欢在磁盘上的某个位置包含数据并允许上传文件。例如:

//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 'Hello world';

那很危险。

经验法则......永远不要相信用户输入,总是验证,防止,验证,修复,验证并再次纠正......

祝你好运

于 2011-12-30T20:36:18.893 回答
5

这完全取决于您将如何处理它:

在不知道您将如何处理您的数据的情况下,不可能说出什么可以保证数据的安全。

于 2011-12-30T20:28:24.257 回答
3

使用用户输入(任何 HTTP 请求都算作用户输入)时,您面临的两个最大风险是:

您应该熟悉风险和防御措施。每种威胁的防御措施都是不同的。使用 addlashes() 并不是一个完整的防御措施。

OWASP 十大项目是学习更多关于安全 Web 编程的重要资源。

我已经做了一个关于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 回答