使用jQuery Ajax的安全风险

这个问题一直困扰着我,所以我正在寻找意见和解决方案,以打击应用程序存在安全风险的可能性。

我使用jQuery做很多事情,但主要是我用它来处理jQuery对话框窗口。 很多时候需要从表单上的字段中获取值,使用.serialize()命令将该信息连接起来并将其传递给jQuery ajax调用以转移到PHP文件以进行数据库交互。

这是我的问题(最后),

是不是很容易’猜测’PHP处理的url是什么样的?
您可以在现代浏览器中打开源代码,然后单击链接以查看包含ajax调用的完整JavaScript文件。

我可能会缩小JavaScript文件以进行混淆,但这并不是一种可靠的安全forms。

我正在使用PDP进行数据库访问,并准备好SQL注入攻击语句,但如果有人花时间查看,他们是否只能形成一个有效的URL,将其发送到数据库并插入他们想要的内容?

我不是在谈论将数据库黑客攻击钢铁信息,我更多的是谈论插入恶意信息,就好像数据是从应用程序本身添加的一样。 想想在购物车上添加50美元只需25美元的东西。

如果它就像将ajax请求从GET转换为POST并更改我的PHP文件一样简单?

编辑:此人已登录并已正确validation。

只是想知道其他人在做什么。

谢谢!

你是非常正确的,任何精通技术的人都可以识别任何webapp的公共服务器端点。 他们甚至不需要查看代码。 他们可以使用他们的webkit / firebug来跟踪请求,或者像Charles这样监控网络活动的程序。

这就是您需要在服务器端代码中进行身份validation授权处理的原因。

身份validation通常由用户名和密码处理; 它是validation用户是谁的行为。

授权可以由服务器上的角色处理,并且是检查以确保用户可以执行他们正在尝试执行的操作。

哪两个机制到位,即使用户知道url,他们仍然需要“登录”并有权做他们想做的事情。

想一想。 如果您在线查看自己的银行帐户信息,则可以轻松识别加载帐户信息的请求。 如果没有这些机制,是什么阻止您只是更改传递给服务器的帐户ID以尝试获取其他人的帐户信息? 通过身份validation/授权,服务器知道即使它收到加载某些数据的请求,它也可以检查用户的详细信息,以查看他们是否有权获取该数据,并拒绝该请求。

即使您从GET切换到POST,对于任何有兴趣查看(和更改)传递给您的服务器的参数的人来说仍然很容易。 但这里是踢球者:即使你根本不使用AJAX,但是使用普通的旧表格, 仍然可以非常容易地查看和编辑传递给服务器的任何参数。

在危急情况下,您永远不能完全依赖您从客户那里收到的东西。

例如,如果您要向购物车添加内容,请仅将商品的ID和数量传递给您的服务器。 不要从您的客户端获取价格详细信息,而是从您的数据库中获取。 如果有人试图破解你并编辑物品ID或发送的数量,那么最糟糕的事情就是他们最终会购买他们不想要的东西; 完全是他们的问题 (但出于同样的原因,如果是有限的报价,您需要validation您收到的数量不会超过您允许任何一个客户购买的数量)。

因此,在一天结束时,您始终是开发人员必须决定您希望用户控制哪些值,并在服务器端validation您没有收到任何超出用户应该的范围的请求。能够做到的。

您永远不能依赖来自客户端的任何操作或数据,而不仅仅是与jQuery相关。

您必须处理服务器端的各种安全问题。 始终仔细检查来自用户的数据(一个在客户端,以减少性能请求的数量;另一个在服务器端进行实际确认)。

请求类型(GET或POST)实际上无关紧要,可以轻松模拟。 用户尝试以25美元的价格添加50美元的商品后,您应检查数据库并确认商品的实际价格。

你不应该这样写代码,价格是从客户单独转移的,因为任何人都可以发送价格= 0或0.01的数据,任何数量的商品/服务或其他。

更一般:永远不要信任客户数据。

是的,您需要服务器端安全性来validation每个数据是否已发送到您的服务器。 例如,您在javascript / jquery中validation数据:

if($(this).val() != ""){ // post to my server page (mypage.cfm/php/asp) } 

但是如果你不保护你的服务器页面,我可以非常容易地将空数据发布到你的服务器并避免使用javascript,所以你需要使用另一个validation脚本来保护服务器页面,例如:

  //dont post to my server ...  

有时这是双重工作,但有时我们都会面对它……