PHP MySQL $ _GET黑客预防

PHP MySQL $_GET Hack prevention

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Best way to stop SQL Injection in PHP

如果我要使用$u get函数从URL中检索变量,我该如何使其不受黑客攻击?现在我只有加斜杠,我还应该加什么?

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


第一个也是最重要的规则是任何输入,不仅是$u get,甚至是使用$u post、$u文件以及从磁盘或流中读取的任何内容,都应该始终进行验证。

现在,为了更详细地回答您的问题,您有几个黑客存在于这个世界上。让我给你看一些:

XSS注射剂

如果您接受来自url的数据,例如从$u获取并输出这些数据,而不去掉可能的标记,则可能会使您的站点倾向于XSS注入或代码注入。例如:

1
http://myhoturl.com/?search=window.location.href="http://thisisahack.com/"

这将输出一个黑客到您的网站,人们将被重定向到另一个页面。此页面可能是网络钓鱼企图窃取凭据

SQL注入

可以将SQL注入到应用程序中。例如:

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

将使您的SQL如下所示:

1
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抽象层。

代码注入

很多人喜欢在磁盘上的某个地方包含数据,并允许上载文件。例如:

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

URL允许您按名称包含一个文件。?显示=myhotfile.txt

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

那个人把它改成了?show=./上传/igotuploaded.txt,运行echo"hello world";

那是危险的。

经验法则…从不信任用户输入,始终验证、阻止、验证、修复、验证并再次更正…

祝你好运


这完全取决于你要用它做什么:

  • mysql:mysql_real_escape_string/pdo/mysqli
  • html:htmlspecialchars(特殊字符)
  • 等。

不知道你将如何处理你的数据,就不可能说出什么会使数据安全。


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

  • SQL注入
  • 跨站点脚本

你应该熟悉风险和防御措施。这些威胁的防御措施各不相同。使用addslashes()不是一个完整的防御。

了解有关安全Web编程的更多信息的一个很好的资源是OWASP十大项目。

我做了一个关于SQL注入神话和谬误的演示,希望对您有所帮助。


读取$获取原始变量并不危险,

危险通常存在于SQL注入中,

例如:

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

与查询:

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

要防止这种情况:

1
2
$safe_input = mysql_real_escape_string($GET["variable1"]);
mysql_query("SELECT userid FROM user WHERE password='".$safe_input."';");