PHP MySQL $_GET 黑客预防

标签 php mysql security get urlvariables

<分区>

Possible Duplicate:
Best way to stop SQL Injection in PHP

如果我要使用 $_GET 函数从 URL 中检索一个变量,我怎样才能让它成为黑客攻击的证明?现在我只有 addSlashes,我还应该添加什么?

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

最佳答案

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

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

XSS 注入(inject)

如果您接受来自 URL 的数据,例如来自 $_GET 的数据,并在不去除可能的标签的情况下输出此数据,您可能会使您的网站容易受到 XSS 注入(inject)或代码注入(inject)。例如:

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

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

SQL 注入(inject)

可以将 SQL 注入(inject)到您的应用程序中。例如:

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 注入(inject)做什么的简要概述。为了保护自己,请使用 mysql_real_escape_string 或 PDO 或任何好的 DB 抽象层。

代码注入(inject)

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

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

那很危险。

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

祝你好运

关于PHP MySQL $_GET 黑客预防,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8683721/

相关文章:

php - 如何使用循环从字符串创建数组?

php - 读取文件时如何删除跳过空行

java - 如何在 Java 中测试不同的 "tables input"?

PHP 输出数组到 SELECT mysql

security - SharePoint:您无法授予有限的访问权限级别

php - 动态添加选项值

php - 通过两个php页面发布表单数据

php - Yii Create Command 无法从 select 获取硬编码值

objective-c - 在 Objective-C 中安全地生成随机数

python - 如何从以色列统计局网络查询工具中抓取数据?