可能的重复项:
在 PHP 中停止 SQL 注入的最佳方法
如果我使用 $_GET 函数从 URL 中检索变量,我该如何使其防黑客攻击?现在我只有添加斜杠,我还应该添加什么?
$variable1 = addslashes($_GET['variable1']);
//www.xxxxx.com/GetTest.php?variable1=xxxx
输入的第一条也是最重要的规则,不仅仅是 $_GET,但即使是 $_POST、$_FILES 以及您从磁盘或流中读取的任何内容,您也应该始终验证。
现在更详细地回答您的问题,您有几个存在于这个世界上的 HACKS。让我向您展示一些:
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';
这是危险的。
经验法则。。。永远不要相信用户输入,始终验证、预防、验证、修复、验证并再次更正...
祝你好运
这完全取决于您要用它做什么:
- MySQL: mysql_real_escape_string/PDO/mysqli
- HTML: htmlspecialchars
- 等。
如果不知道您将如何处理数据,就不可能说什么可以使其安全。
使用用户输入(任何 HTTP 请求都算作用户输入(时面临的两个最大风险是:
- SQL 注入
- 跨站点脚本
您应该熟悉风险和防御措施。 每种威胁的防御措施都不同。 使用 addslashes(( 并不是一个完整的防御。
了解有关安全Web编程的更多信息的一个很好的资源是OWASP Top Ten project。
我已经做了一个关于SQL注入神话和谬误的演讲,希望对您有所帮助。
原始读取 $_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."';");