在服务器端表单提交处理程序中检查引用是一个好习惯吗?

Is it a good practice to check referer in the server-side form submission handler?

我正在做一个 Java 网站。我希望使网站更安全。

在我的网站中,所有表单都应该(按设计)通过我网站上的 GET link 在页面中打开。我希望在我的服务器端表单提交处理程序中检查 referer 是否是我的网站。这个想法是为了避免从攻击者本地生成的表单提交中获取数据。

我觉得这种方式的关键在于服务器检测到的referer是否可靠。

我知道还有其他方法可以提高安全性。让我们只关注我 post.

中的方法

感谢任何意见!

更新

具体来说,我正在做一个 Spring MVC 网站。我正在使用拦截器检查所有流量,尤其是表单提交。

不,它不可靠。某些浏览器可能允许删除引荐来源网址,或者可能根本不发送它。一个顽皮的人可以轻松地将推荐人添加到请求中,因此它本身不会提供任何额外的安全性,除非随机的人尝试随机的事情。

不是最好的方法,但是 referer checking can help prevent Cross Site Request Forgery attacks:

Although it is trivial to spoof the referer header on your own browser, it is impossible to do so in a CSRF attack. Checking the referer is a commonly used method of preventing CSRF on embedded network devices because it does not require a per-user state.

[snip]

...checking the referer is considered to be a weaker from of CSRF protection. For example, open redirect vulnerabilities can be used to exploit GET-based requests that are protected with a referer check and some organizations or browser tools remove referrer headers as a form of data protection.

请记住,攻击者不是坐在键盘前的那个人——他们很难从受害者的机器上欺骗 referer。

不过,防止 CSRF 的最强方法是 Synchronizer Token Pattern