【发布时间】:2012-01-07 17:42:52
【问题描述】:
我想知道$_POST 和$_GET 是否存在安全问题。
假设我有一个 AJAX 代码,它将数据发送到 PHP 文件,其中包含以下内容:
if(isset($_POST['id'])) {
$client_id = mysql_real_escape_string($_POST['id']);
$client_name = mysql_real_escape_string($_POST['name']);
//Delete the Client
$sql="DELETE FROM clients WHERE id='".$client_id."'";
mysql_query($sql) or die(mysql_error());
//Client Pages Delete
$sql="DELETE FROM fanpages WHERE client='".$client_name."'";
mysql_query($sql) or die(mysql_error());
现在假设 PHP 文件名是 delete.php 任何用户都可以写像 delete.php?id=423&name=Jack 这样的东西,它会喊出查询并删除客户端?
一开始我正在考虑添加一个 COOKIE 检查,但据我所知,COOKIE 也可以伪造,对吗?
那么,结合 DB quires 发出安全的 $_POST 和 $_GET 请求的解决方案是什么?
编辑:所有这些都发生在用户密码保护区域内,但我问的是唯一的 delete.php 文件,我是否还需要在该文件中添加 COOKIE 检查?
EDIT2: 脚本使用的是 COOKIE 而不是 SESSIONS,我是否也应该将 SESSIONS 添加到系统中? cookie 和 session 必须在同一个系统上吗?
【问题讨论】:
-
您必须进行某种身份验证。如果你没有这个,任何人都可以简单地输入 url(就像你说的那样)并执行更改。您的网站上应该有一些代码、会话、密码等内容。这将提高安全性。
-
您可以轻松创建自己的获取和帖子。修改一个帖子并不难,但显然比使用 get 难多了。 PDO 可以阻止 SQL 注入,但您仍需要检查用户是否有权执行某些查询。因此,在您的情况下,您需要查看用户是否可以实际运行该查询。
-
您需要在每个需要保护的文件中添加会话检查。
-
没有。您不需要同时使用会话和 cookie。只需确保您为登录用户创建的 cookie 存在,然后再删除他。从逻辑上讲,未登录的人不能使用您的
delete.php,如果它只允许用户自己删除她的个人资料。 -
cookie 和会话都有自己的漏洞。这是一个广泛的讨论。在您的情况下,如果有人设法找出您的 cookie 的格式,他可以在他的系统上创建一个假 cookie,以假装他是另一个登录的用户:避免这种情况的一种方法是为每个用户并将其保存在他的 cookie 中。其他人不会知道那个号码,也不能假冒他的身份登录……这方面的讨论很多。在网上搜索更多信息。