我即将创建一个新网站,并担心潜在的安全漏洞。我专注于其他人使用我的PHP脚本的可能性(据我所知,CORS
或cURL
等方法是可行的 - 我错了吗?)。< / p>
我刚刚搜索过,发现您可以使用PHP $_SERVER["HTTP_REFERER"]
来检查发送它的网址。
关于$_SERVER["HTTP_REFERER"]
的使用和安全问题,有很多问题,例如this one和this one。
许多答案与this one(如下所示)相似,表示它不安全,因为软件经常将其删除:
它可能安全,但它不可靠:由于HTTP spec,HTTP_REFERER是可选的(有些客户端根本不发送此标头,有些& #34; security&#34;软件从任何HTTP请求中删除它,并且有许多方法可以修改此标头。有些浏览器发送引用页面,有些浏览器发送空白字符串,有些浏览器根本不发送,有些浏览器可能发送虚假数据,有些可能会发送Matilda姨妈;而且,您无法判断您是否在此标头中获得了有效数据。
所以,不,我永远不会相信HTTP_REFERER包含上一页,你也不应该。
但他们只是主要暗示推荐人的信息可能只是遗漏/丢失/不完整,但没有错。
因此,如此使用它是否安全:
<?php
if($_SERVER["HTTP_REFERER"] != "my_http_referer.php") {
die("You cannot access this script.");
}
?>
这不是安全,即使$_SERVER["HTTP_REFERER"]
是可选的且可能不完整吗?如果它是我自己以外的任何其他脚本,那么它不应该die()
吗?或者我忽略了什么?
答案 0 :(得分:1)
如果您主要关注网络应用安全性,那么您应该使用其他一些机制来确保请求确实来自您自己的其他网页。你引用的答案很清楚。您不应该只信任HTTP_REFERER。
如果要设置其他识别令牌,可以使用sessionStorage。然后在每次提交表单时阅读。每次收到请求时交叉检查。如果你想要有更多的非预测行为,你可以继续改变它。
这有意义吗?