$ _POST,$ _GET和安全

时间:2011-11-28 07:58:34

标签: php ajax post get

我想知道$_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也可以伪造,我是对的吗?

那么安全$_POST和安全的解决方案是什么? $_GET请求结合使用DB quires?

编辑:所有这些都发生在用户密码安全区域内,但我问的是唯一的delete.php文件,我是否需要将COOKIE检查添加到此文件中好?

EDIT2:脚本正在使用COOKIE而不是SESSIONS,我是否应该将SESSIONS添加到系统中?是否有必要在同一系统上使用cookie和会话?

3 个答案:

答案 0 :(得分:2)

诀窍是正确转义数据并阻止SQL injections。如果要删除用户并且您想要更安全,您可能需要登录或其他东西。

session_start();

// ...

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

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

Here is a great example!

答案 1 :(得分:1)

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

然后你会检查$ _SESSION [“username”]如果它是空的那么你不会删除它但是如果有用户名(你将在登录时设置)那么你将验证用户是否有有权进行这项行动。

答案 2 :(得分:1)

此主题针对的是会话,但我打赌你的cookie现在不安全。偷饼干非常容易。您应该进行会话,但是您需要确保您的会话路径是私密的,并且您不会让人们劫持您的会话等。

PHP Session Security