防止从不同域PHP发布数据

时间:2016-11-08 10:59:19

标签: php mysql

我的php页面中有一个表单。在这个页面中,我打开一个窗口弹出窗口。在这个弹出窗口中有一些字段。我们填写表格并提交。提交表单后,我们会向用户发送邮件。基本上它是一个表格,用户可以通过发送邮件给他们的朋友参考网站。 不幸的是有人攻击我的网站并使用我的PHP脚本发送邮件。 所以,我想限制从外部服务器访问PHP脚本。 我该怎么做才能限制访问。 我尝试了一些选择,但没有成功。

1 个答案:

答案 0 :(得分:1)

有两种方法可以缓解这种情况,完全停止这种情况是不可能的。

使用HTTP Referer:

$referer = parse_url($_SERVER['HTTP_REFERER']);
$allowedDomain = 'yourdomain.com';

if ($referer['host'] == $allowedDomain){
     //Process your mail script here.
}

请注意,您不能信任HTTP_REFERER值。它很容易被欺骗。

使用代币:

生成随机令牌并将其放在表单POST中,如:

if (!isset($_POST['submit'])){
    $_SESSION['random_code'] = rand(0, 1000000);
}else{
    if ($_POST['random_code'] == $_SESSION['random_code']){
        //process your mail script here

        //reissue session code
        $_SESSION['random_code'] = rand(0, 1000000);
    }
}
<input type='hidden' name="random_code" value="<?php echo $_SESSION['random_code'];?>">

在会话中保存此随机代码。提交表单时,将提交的random_code值与会话中保存的代码进行匹配。如果两者相同,则处理您的邮件脚本。

通过这种方式,攻击者必须首先打开您的页面,获取随机代码,然后提交您的表单。它不会阻止这种攻击,但肯定会减慢他的进程。