【问题标题】:$_POST, $_GET and Security$_POST、$_GET 和安全性
【发布时间】: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 中。其他人不会知道那个号码,也不能假冒他的身份登录……这方面的讨论很多。在网上搜索更多信息。

标签: php ajax post get


【解决方案1】:

诀窍是正确转义数据并防止SQL injections。如果涉及到删除用户并且您希望更加安全,您可能还需要登录或其他操作。

session_start();

// ...

if (true === $_SESSION['userLoggedIn']) {
    // your code
}

当然,这需要您在提交登录表单后创建某种身份验证程序。 (例如,查询 MySQL 数据库并针对用户表测试用户名和密码)

Here is a great example!

【讨论】:

  • 请参阅 EDIT2。使用 COOKIE 是否也安全,或者我也会进行 SESSION 授权?
  • 如果你真的想要,你也可以使用 cookie。身份验证过程几乎相同,只是您不再需要session_start(),并且您将在用户通过身份验证后使用setcookie(),而不是在$_SESSION 中设置值..
  • 听说COOKIE的可以伪造是真的吗?
  • 是的,这是真的。事实上很容易。另外,请注意会话劫持和类似的事情。为了增加安全性,您可以使用安全会话和 HTTPS。
【解决方案2】:

您应该只允许登录的客户端发出这样的敏感请求。 使用会话 在文件的开头你会做 session_start();

然后您将检查 $_SESSION["username"] 如果它是空的,那么您不会删除它,但如果用户名存在(您将在登录时设置),那么您将验证用户是否有执行操作的权限。

【讨论】:

  • 脚本使用的是 COOKIE 而不是 SESSIONS,我是否也应该将 SESSIONS 添加到系统中?是否有必要在同一系统上拥有 cookie 和会话?
  • 通过会话,实际数据保留在服务器上(只有会话 ID 在 cookie 中)并且无法伪造,但使用 cookie 数据将保存在可以伪造的客户端计算机上。
【解决方案3】:

这个帖子是针对会话的,但我敢打赌,你的 cookie 现在并不安全。窃取饼干非常容易。您应该进行会话,但您需要确保您的会话路径是私有的,并且您不会让人们劫持您的会话等。

PHP Session Security

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多