黑客是否有可能看到原始POST数据?

时间:2015-05-16 19:56:20

标签: php http-post

我通过POST方法通过HTTP而不是HTTPS发送未加密的电子邮件和密码。

有人可以查看原始帖子数据吗?

我认为原始帖子数据如下所示: 电子邮件=' example@aaa.com'&安培;密码=' qazwsx'

我知道我应该加密密码,但这只是我编写的一个例子。

实际上,我传递了更多敏感信息。

编辑:

我目前有一个名为register.php的php脚本,它完全符合名称的含义。

任何聪明到足以猜测我使用两个名为"电子邮件"和#34;密码"只需发送一些POST数据就可以实现新用户的注册。我该如何防止这种漏洞利用?显然,它与SSL无关,这是我的第二个问题。

我不想要一个17岁的黑客"在3天内生成18,838,929个新帐户。

2 个答案:

答案 0 :(得分:2)

POST数据在请求正文中以未加密的方式发送。它与使用GET传递它一样安全,但视觉效果较差。如果您的用户通过公共/不安全(WiFi)网络连接,则网络后面的某人可能会拦截流量和所有HTTP数据。

考虑到您传递敏感数据,最安全的解决方案是使用HTTP over SSL(HTTPS)。这将为您处理加密。您也可以进行某种内部客户端加密,然后发送数据,但HTTPS是为了安全起见的方式。

编辑: 至于第二个问题,防止自动请求的简单/基本方法是检查每个请求的Referer和Origin头。这样您就可以过滤掉任何异地请求。另一种选择是限制IP地址和用户代理详细信息的相同组合的每个时间间隔的请求数。这些方法都不是完全安全的,但可以与实体验证码测试结合使用。

答案 1 :(得分:0)

使用会话。

每次用户/客户端访问您的注册页面时创建一个新的会话标识符,然后使用它来验证请求。你首先看到了验证码背后的主要思想。或者更好的是:

<?Php
session_start();

if(isset($_SESSION['input1'])
&& isset($_SESSION['input2'])
&&(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST'
|| strtoupper($_SERVER['REQUEST_METHOD']) === 'GET'))
{   if(isset($_POST[$_SESSION['input1']])
    && !empty($_POST[$_SESSION['input1']])
    && isset($_POST[$_SESSION['input2']])
    && !empty($_POST[$_SESSION['input1']]))
    {    //PROCESS YOUR POST DATA HERE
         $myInput1 = sanitize($_POST[$_SESSION['input1']]);
         $myInput2 = sanitize($_POST[$_SESSION['input2']]);
         echo "My variables are {$myInput1} and {$myInput2}.";
         //AND ET CETERA
    }
    else
    {    session_unset();
         session_destroy();
         echo <<<REDIRECTION
         <script type='text/javascript'>
             alert("You've had a premature detonation. Call 911.");
             window.location.replace('{$_SERVER['PHP_SELF']}');
         </script>
REDIRECTION;
    }
    clearsess();
    exit();
}

function sanitize($variable,$conn=NULL)
{    if ($conn != NULL)
        return mysqli_real_escape_string($conn, filter_var($variable, FILTER_SANITIZE_STRING));
    else
        return filter_var($variable, FILTER_SANITIZE_STRING);
}

function createForm()
{   $_SESSION['input1'] = rand(1111,9999);
    $_SESSION['input2'] = rand(11111,99999);
    return <<<NEWFORM
    <form action = '{$_SERVER['PHP_SELF']}' method = 'post'>
       <input  type='text' name='{$_SESSION['input1']}'>
       <input  type='text' name='{$_SESSION['input2']}'>
       <input type='submit' value='submit'>
       <input type='reset' value='reset'>
    </form>
NEWFORM;
}

function clearsess()
{   if(session_id() != '' && empty($_SESSION))
    {  session_unset();
       session_destroy();
    }
    session_write_close();
}
?>
<html>
<head></head>
<body>
<?Php echo createForm(); ?>
</body>
</html>
<?Php clearsess(); ?>

嗯,你可以和验证码一起使用它。 Captcha肯定会使用会话。

相关问题