所以我有一个JavaScript和php网络应用程序。在我的应用程序中,我有时会在JavaScript中调用POST请求,例如创建帖子。我想知道验证我的请求的最佳方法是什么,以防止任何人访问该URL。它不需要那么灵活。我不会有多个应用程序。我只需要在php和JavaScript中使用一个案例解决方案。
编辑:第二个问题。只是确保请求来自足够的URL吗?
答案 0 :(得分:2)
你不能。
您可以执行诸如在JavaScript中添加额外标头的请求,但由于您必须向浏览器发送有关如何执行此操作的说明,因此任何人都可以阅读它们并将其复制以用于自定义构建非JS请求。
在WWW上,您可以对人员进行身份验证(使用凭据),但您无法对客户端进行身份验证(除非您在已编译的捆绑包中提供客户端软件...即使这不可靠,官方Twitter客户端身份验证密钥也会出现现在在野外)。
只是确定请求来自足够的URL吗?
如果您的意思是“检查referer标题”,那么没有。这是由客户端设置的,客户端可以将其设置为他们喜欢的任何内容。
答案 1 :(得分:1)
最好的办法可能是建立一个PHP会话并将存储在$ _SESSION中的标识发送到javascript。在每个AJAX POST中,您都要添加此标识,并在服务器端检查$ _SESSION中存储的内容。如果他们不匹配某人试图操纵URL或CSRF。
如果您想阻止原始客户端在会话中执行多个请求,您需要将一个nounce-number从服务器发送到客户端,该客户端只能使用一次。看到: http://en.wikipedia.org/wiki/Cryptographic_nonce
答案 2 :(得分:0)
您可以将此行放在脚本之上
<?php if ( ! defined('BASEPATH')) exit('Permission denied: direct access');
作为你发送POST的php文件的第一行。
编辑 - &gt;或类似的东西
if(!isset($_POST))
{
die('no direct access allowed');
}
else
{
//all your PHP code
}
你也可以在帖子中包含你自己的变量并在
中使用它isset($ _ POST ['你的变量'])
检查。