验证客户端JavaScript事件的最佳方法

时间:2013-03-08 06:58:35

标签: php javascript ajax authentication http-post

所以我有一个JavaScript和php网络应用程序。在我的应用程序中,我有时会在JavaScript中调用POST请求,例如创建帖子。我想知道验证我的请求的最佳方法是什么,以防止任何人访问该URL。它不需要那么灵活。我不会有多个应用程序。我只需要在php和JavaScript中使用一个案例解决方案。

编辑:第二个问题。只是确保请求来自足够的URL吗?

3 个答案:

答案 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 ['你的变量'])

检查。