我通过POST方法通过HTTP而不是HTTPS发送未加密的电子邮件和密码。
有人可以查看原始帖子数据吗?
我认为原始帖子数据如下所示: 电子邮件=' example@aaa.com'&安培;密码=' qazwsx'
我知道我应该加密密码,但这只是我编写的一个例子。
实际上,我传递了更多敏感信息。
编辑:
我目前有一个名为register.php的php脚本,它完全符合名称的含义。
任何聪明到足以猜测我使用两个名为"电子邮件"和#34;密码"只需发送一些POST数据就可以实现新用户的注册。我该如何防止这种漏洞利用?显然,它与SSL无关,这是我的第二个问题。
我不想要一个17岁的黑客"在3天内生成18,838,929个新帐户。
答案 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肯定会使用会话。