我做了很多搜索,也读了PHP$_SERVER docs.对于在整个站点中使用的简单链接定义的PHP脚本,我有这样的权利吗?

$_SERVER['SERVER_NAME']基于您的Web服务器的配置文件(在我的例子中是Apache2),并且根据以下几个指令而有所不同:(1)VirtualHost、(2)ServerName、(3)UseCanonicalName等.

$_SERVER['HTTP_HOST']是基于客户的请求.

因此,在我看来,为了使我的脚本尽可能兼容,应该使用$_SERVER['HTTP_HOST'].这个假设正确吗?

Followup comments:

我想读了这篇文章后,我有点多疑了,注意到一些人说"他们不相信$_SERVER名Var中的任何一个":

显然,讨论的主要内容是关于$_SERVER['PHP_SELF'],以及为什么在没有正确转义以防止XSS攻击的情况下,不应该在form action属性中使用它.

我对上述原始问题的结论是,在一个网站上的所有链接中使用$_SERVER['HTTP_HOST']是"安全的",而不必担心XSS攻击,即使在表单中使用.

如果我说错了,请纠正我.

推荐答案

这可能是每个人的第一个 idea .但这有点难.见Chris Shiflett’s article SERVER_NAME Versus HTTP_HOST.

似乎没有什么灵丹妙药.只有当你force Apache to use the canonical name岁时,你才能用SERVER_NAME获得正确的服务器名.

因此,你要么 Select 它,要么对照白名单判断主机名:

$allowed_hosts = array('foo.example.com', 'bar.example.com');
if (!isset($_SERVER['HTTP_HOST']) || !in_array($_SERVER['HTTP_HOST'], $allowed_hosts)) {
    header($_SERVER['SERVER_PROTOCOL'].' 400 Bad Request');
    exit;
}

Php相关问答推荐

如何使用查询范围在Statamic中按组过滤用户?

在WooCommerce产品档案页面中显示产品销售百分比

Laravel;Composer安装突然返回选项快捷方式不能为空.

EBay Inventory API createOrReplaceInventoryItem出错

在Laravel中修改JSON输出

WooCommerce在购买后多次重定向

如何在汇总表构建器中操作LALAVEL细丝Sum::Make()值

按列值将二维数组排序为不超过N个的递增组

SFTP在PHP(phpseclib3\Net\SFTP)-过滤目录列表结果服务器端可能吗?类似于psftp中的LS命令?

Laravel Carbon DiffForHumans选项(年,月,天)

Regex:高级删除单行PHP注释

Mockery在模拟Redis连接时抛出错误:Mockery\Exception\BadMethodCallException

WooCommerce产品页面上没有产品详细信息

为什么从一个页面到另一个页面都找不到 JQuery,因为它们使用相同的 twig 模板?

如何更新 Laravel Eloquent 列强制转换为集合

如何在构建 PHP 类别数组树的递归函数中将父面包屑传递给子项?

htaccess php 文件,然后是文件夹

是否有适用于 Windows 的真正 64 位版本的 PHP 5.6?

Laravel Websockets 错误:(WebSocket 在建立连接之前关闭)

PHP Remedy API 调用以创建附件无效的条目(使用 Postman Works!)