限制可以发送 PHP POST 信息的域

问题描述 投票:0回答:6

是否可以限制允许将 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,我希望它被拒绝。

php forms
6个回答
4
投票

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

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


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 } ?>



0
投票

您可以通过创建白名单 IP 地址数组来实现此目的,并使用

in_array

 进行检查。 
if (in_array($_SERVER['REMOTE_ADDR'], $whitelist)) {



0
投票
_SERVER[HTTP_HOST]

是否在您允许的域列表中。 该值由服务器设置,因此客户端无法欺骗。 请注意,这是代码运行的域,这似乎就是您的问题所问的。 您的意思是请求发送的域

from
if (!in_array($_SERVER['REMOTE_ADDR'], array('ip1', 'ip2'))) die('Not allowed');


0
投票
所有以 HTTP 开头的 SERVER 变量都可以由调用者更改,因此它们不提供保护。

0
投票

在后端,我解密并检查令牌是否存在,并且时间戳不早于几秒。

我相信这是安全的,但希望得到一些反馈

© www.soinside.com 2019 - 2024. All rights reserved.