php - HTTP_REFERER 是否由客户端设置

标签 php security http-referer

我听说 HTTP_REFERER 可以被欺骗。我有 2 个站点,第一个联系第二个,第二个使用 HTTP_REFERER 来验证请求来自第一个。

如果我收到从我的第一个站点到第二个站点的虚假请求并且我知道这个请求不是发出的,我应该怎么想?第三个网站正在为所有用户欺骗 http_ref,或者某个人正在通过他的浏览器设置来欺骗它?我想知道 http_ref 是由客户端/浏览器还是网站本身设置/欺骗的?

最佳答案

是客户端发送的信息。它通常设置为您单击链接的页面。

它也绝对可以被欺骗。您可以通过在 PHP cURL 请求中设置 HEADER 来自己完成。

curl_setopt( $ch, CURLOPT_HTTPHEADER, array(
        'Host: www.google.com',
        'Referer: http://google.com/', 
        'FaKeHEADER: ThisIsFakeButItWillBeSentAnyways'));  

接收服务器将在标题中看到这些内容,即使它从未从 google.com 发送过。您还可以欺骗您在 header 中看到的所有其他内容(用户代理、cookie 等)。

您将很难检测到欺骗性 header ,除非您确切知道每个来源的每个 header 应该是什么样子。您可以做的最好的事情是使用 IP 并限制您接受的 header 类型(例如,如果页面只能使用 GET 请求,则拒绝所有 POST 请求)。即使这样,如果有人想欺骗您,他们也很可能会这样做,而您不会知道。

如果您试图保护您的 2 个站点之间的连接,您应该限制连接不仅仅是一个标题,那根本不安全。

编辑:您甚至可以发送真正的假 header 。我更新了示例以说明我的意思。一些站点使用自定义(如假的) header 来传递身份验证。

关于php - HTTP_REFERER 是否由客户端设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5453776/

相关文章:

php - 试图在laravel中获取非对象错误的属性

php - 如何构建 PHP 队列系统

android - 禁用从 3rd 方应用程序对帐户管理器中帐户的静默访问

JAVA API 创建 keystore 并向其附加 csr 和 key 对

php - 通知 : Undefined index: HTTP_REFERER

php - mcrypt_encrypt 的 javascript 替代品

php - 寻路算法找到从一个地方到另一个地方的路线

java - 验证 SSL 认证 Java/Android

.htaccess - 拒绝来自除一个域之外的所有域的推荐

没有 HTTP_REFERER 的 Django + CloudFront 缓存