1

是否可以限制允许将 POST 信息发送到 process.php 文件的域。

因此,例如在 process.php 文件的顶部(它使用来自表单提交的 $_POST 数据)我想添加类似这样的内容。

<?php
  Allowed Domains: domain.com, domain2.com
?>

只有从允许域提交的表单才会使用任何发布信息。

这是为了防止有人在自己的服务器上创建 HTML 表单并操纵表单以尝试利用 process.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,我希望它被拒绝。

4

5 回答 5

4

您不能通过检查域来做到这一点,因为发送请求的域很容易被用户代理欺骗,您将束手无策。无助!

您所关心的是所谓的跨站请求伪造。我认为对您来说理想的解决方案是在您想要保护的形式中包含一个随机生成的令牌,并将匹配的令牌存储在会话中,并且仅在它们匹配时才允许发布。从另一个域发帖的人需要先在会话中设置令牌,然后以某种方式获取令牌.. 如果不查看您创建的表单(或非常幸运),他们将无法做到这一点。

于 2012-05-25T05:43:54.767 回答
2

您可以尝试以下操作。

<?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
}
 ?>
于 2012-05-25T05:31:16.130 回答
0

POST 请求并不总是来自域。它们可能来自任何连接到互联网的设备。因此,您应该根据 IP 地址进行过滤。

您可以通过创建一组列入白名单的 IP 地址来执行此操作,并用于in_array检查。

if (in_array($_SERVER['REMOTE_ADDR'], $whitelist)) {
于 2012-05-25T05:23:06.663 回答
0

您可以检查它_SERVER[HTTP_HOST]是否在您的允许域列表中。这个值是由服务器设置的,所以它不能被客户端欺骗。请注意,这是代码正在运行的域这似乎是您的问题所在。您是指发送请求的域

于 2012-05-25T05:24:25.600 回答
0
if (!in_array($_SERVER['REMOTE_ADDR'], array('ip1', 'ip2'))) die('Not allowed');
于 2012-05-25T05:26:48.943 回答