我想知道是否有办法确保通过POST发送的表单来自我的网站。我查看了一些教程,他们建议我使用“隐藏”输入值进行验证,但这可能毫无意义,因为任何人都可以查看我的网站的html源代码,收集信息,如文本框的名称属性。
如果我不清楚,请告诉我。
直到最近我才开始学习使用PHP和ASP.NET来制作网站。所以,请稍微清楚,因为我只是一个初学者。提前致谢。
答案 0 :(得分:4)
您可以检查引荐来源网址,如果它与您的网址匹配,那么它就是安全的。
$ref = $_SERVER["HTTP_REFERER"];
将$ ref与您的域名进行比较后,将其分割为仅获取域名。
答案 1 :(得分:3)
您可以使用称为跨站点请求伪造的技术:http://en.wikipedia.org/wiki/Cross-site_request_forgery
基本上,这种做法大致是:
此过程的主要限制是您的表单有时间限制,对会话销毁很敏感,只能用于用户交互。
一旦掌握了PHP的基础知识,为什么不考虑使用框架呢?我经常使用Symfony2,它们有一个很好的表单包,从一开始就处理这种安全性:http://symfony.com/doc/current/book/forms.html#csrf-protection
答案 2 :(得分:2)
您还可以在表单页面上设置$_SESSION
变量,并在处理页面上检查它。
答案 3 :(得分:0)
您知道您希望从表单中获得哪些字段和数据,因此最好的办法是验证POST数据。如果您知道您需要x个字段,那么请验证并验证该数据。例如,如果您有一个具有日期输入的字段,请使用PHP以确保它是有效日期。如果它是一个整数,请在将它用于任何内容之前验证它是否为整数。对于文本字段,删除所有html和JavaScript等。你明白了。
除了尝试验证表单是否已从您的网站发布外,您做得更好。