是否可以限制允许将POST信息发送到process.php文件的域。
例如,在process.php文件的顶部(使用表单提交中的$ _POST数据),我想添加这样的内容。
<?php
Allowed Domains: domain.com, domain2.com
?>
只有从允许的域提交的表单才会使用任何帖子信息。
这是为了防止有人在自己的服务器上创建HTML表单并操纵表单来尝试利用进程中的任何漏洞.php
基本上我有一个process.php文件,我想接受来自多个域的提交。
e.g. Domain.com/form.html >>> http://MainDomain.com/process.php
or Domain2.com/form.html >>> http://MainDomain.com/process.php
我想允许任何包含允许域列表中的表单的页面能够在process.php上运行。如果未被拒绝的域提交到process.php,我希望它被拒绝。
答案 0 :(得分:3)
您可以尝试以下内容。
<?php
$allowedDomains = array('www.abc.com', 'www.xyz.com');
$referer = $_SERVER['HTTP_REFERER'];
$domain = parse_url($referer); //If yes, parse referrer
if(in_array( $domain['host'], $allowedDomains)) {
//Run your code here which will process the $_POST
} else {
echo "you are not allowed to post at this page";
exit(); //Stop running the script
}
?>
答案 1 :(得分:3)
您无法通过检查域来执行此操作,因为发送请求的域很容易被用户代理欺骗,您将无能为力。无奈!
您关注的是Cross Site Request Forgery。我认为理想的解决方案是在您想要保护的表单中包含一个随机生成的令牌,并在会话中存储匹配的令牌,并且只有匹配才允许发布。从另一个域发布的人需要先在会话中设置令牌,然后以某种方式获取令牌..如果不查看您创建的表单(或非常幸运),他们就无法做到这一点。
答案 2 :(得分:0)
POST请求并不总是来自域。它们可能来自连接到互联网的任何设备。因此,您应该根据IP地址进行过滤。
您可以通过创建列入白名单的IP地址阵列来执行此操作,并使用in_array
进行检查。
if (in_array($_SERVER['REMOTE_ADDR'], $whitelist)) {
答案 3 :(得分:0)
您可以检查_SERVER[HTTP_HOST]
是否在您允许的域名列表中。此值由服务器设置,因此客户端不能欺骗它。请注意,这是代码在 上运行的域,这似乎是您的问题所在。您是说从发送请求的域名吗?
答案 4 :(得分:0)
if (!in_array($_SERVER['REMOTE_ADDR'], array('ip1', 'ip2'))) die('Not allowed');