安全的AJAX请求到URI

时间:2013-04-09 02:20:48

标签: php ajax security restful-url

我知道有很多关于AJAX安全性的问题。我已经搜索过并阅读过但仍不清楚最佳方法是什么。

我有一个非常具体的场景:

我有一个构建在PHP MVC框架之上的应用程序。我已经转换了诸如“导航菜单”模块化的演示元素。导航菜单模块具有控制器(服务器端)。控制器使用模型从数据库中检索数据,然后使用php回显数据进行响应。我可以使用AJAX向控制器发出http请求,因为控制器是通过URI路由到的。我相信这是一个RESTful API。当用户单击导航菜单中的链接时,将使用从AJAX请求中检索的数据更新静态内容区域。假设我在同一个能够将数据写入数据库的控制器中执行不同的操作。拥有允许写入数据库的公共URI显然很糟糕。如何保护URI接口以便AJAX可以检索和写入数据,但那些具有恶意意图的人可能会造成伤害?

3 个答案:

答案 0 :(得分:1)

您必须在处理获取请求或发布请求时处理ajax请求。 换句话说,永远不要相信用户。你有服务器端控制,ajax是客户端,所以永远不要信任发出请求的“CLIENT SIDE”(检查数据,如果数据正常则返回响应,如果没有返回另一个响应)。

答案 1 :(得分:0)

Controller能够写入数据库:

没有真正的方法来保护公共URI接口,以便只能由客户端上存在的应用程序部分访问它。那么我们的想法是不要让界面如此公开,这意味着每个人都无法访问它!如果URI指向“控制器”(MVC体系结构),并且控制器有权操作关键数据库,则最好这样做,以便将请求发送到控制器的客户端必须“进行身份验证”。无论http请求来自Web表单还是Ajax,这个概念都是正确的。通常在使用https(http + SSL)传输身份验证凭据之前,以防止“中间人”看到凭据。

Controller可以从数据库中读取:

当发出读取请求时,您可以简单地返回数据,或者如果其敏感数据需要经过身份验证的客户端。

“导航菜单模块”只能由管理员编辑,因此必须进行身份验证。但是,任何浏览包含该模块的网页的网络冲浪者都不应该使用导航进行身份验证,这将是愚蠢的。

答案 2 :(得分:0)

主要规则是验证所有输入 - 检查所有数据并从不需要的字符中清除。

此外,这完全取决于您是否允许用户在不登录的情况下更改您的数据库。记录的用户更容易验证,如果允许当前用户执行此操作,您始终可以使用服务器端检查脚本。

当您允许匿名用户写入您的数据库时,事情会变得更加困难。然后,它主要在ID上运行,如果允许用户从输入中插入数据,则可以过滤所有不需要的东西。这样做的好方法是创建字符白名单你批准并削减其他所有内容。

你必须记住,Ajax只不过是发送POST请求到url - 你应该做与标准表单相同的保护。另外一个好的做法是为您的发送数据添加一个令牌 - 您可以通过服务器端进行验证。