这是一个问题,至今已经打扰我了一段时间,所以我要寻找的意见和解决方案,以打击与应用中存在安全隐患的可能性。
我使用jQuery的很多事情,但主要是我用它来处理jQuery的对话窗口。 很多时候,有必要从现场抢表格上的数值,并置有.serialize()命令的信息和将其传递给jQuery的AJAX调用头部到PHP文件数据库交互。
这里说到我的问题(最终),
是不是riduclasly容易“猜”的URL可能看起来像这样的PHP处理?
你可以打开一个现代浏览器的源和点击一个链接来看看包含Ajax调用的全JavaScript文件。
我可能压缩JavaScript文件进行模糊处理,但是这不是安全的一种形式都要靠它APON。
我使用PDP的数据库与SQL注入攻击准备的语句访问,但如果有人走上时间看,不能他们只是形成一个有效的URL把它送上了数据库,并插入他们想要什么?
我不是在谈论黑客数据库钢信息,我更多的在谈论插入恶意信息,但应用程序本身添加的数据。 想添加一些您的购物车是只有25 $ 50 $。
如果只是简单的从GET转动Ajax请求POST和改变我的PHP文件?
编辑:人登录并正确验证。
只是不知道什么其他人在那里做。
谢谢!
你说的很正确,谁稍微精通技术可以识别任何Web应用程序的公共服务器端点。 他们甚至不需要看代码。 他们可以用自己的WebKit的/萤火虫跟踪请求,或者像查尔斯一个程序,它监视网络活动。
这就是为什么你需要在你的服务器端代码验证和授权处理。
认证通常由用户名和密码处理; 它是验证用户的行为是他是谁。
授权可以通过角色在服务器上进行处理,是检查,以确保用户可以做什么,他们正在尝试做的。
这地方这两种机制,即使用户知道一个网址,他们仍然需要“登录”,并有权做他们想做的事情。
想想吧。 如果您在您的银行帐户信息网上看,你可以很容易地识别出装入您的帐户信息的请求。 如果没有这些机制,是什么阻止你只是改变了帐户ID传递给服务器,以尝试并获得其他人的帐户信息? 随着认证/授权,服务器知道,即使它会加载一些数据的请求,它可以检查用户的详细信息,看看他们是否有权获得这些数据,并拒绝该请求。
即使你从GET到杆开关,它仍然会很容易让有兴趣的人看到(和更改)的任何参数传递到您的服务器。 但这里的踢球者:即使你不使用AJAX的,而是普通的旧形式,它仍然是非常容易查看和编辑被传递到你的服务器的任何参数。
在紧急情况下,你永远不能完全在你从你的客户得到什么依靠。
例如,如果您要添加的东西到你的购物车,通过该项目的唯一的ID,和数量,到你的服务器。 不要从你的客户端获取价格信息,但是从你的数据库。 如果有人试图破解你和编辑正在发送的项目ID或数量,这种情况发生的最糟糕的事情是,他们最终会买东西,他们不希望; 完全是他们的问题。 (但对于同样的原因,如果它是一个有限的报价,你需要确认你收到的数量并不比你让任何一个客户买什么更大,例如)。
因此,在这一天结束的时候,它总是你谁可以决定你想要的用户控制,并且在你没有recevied是用户什么样的范围之外的任何请求应该在服务器端验证其重视开发要能够做到。
你永远不能依赖于从客户端,不仅关系到未来的jQuery的任何动作或数据。
你必须处理每一种在你的服务器端的安全问题。 总是双重检查数据从用户来(一个是用于降低性能的请求数量的客户端侧上;而另一个是在服务器端用于实际确认)。
请求类型(GET或POST)其实并不重要,它可以很容易地模拟。 用户尝试添加$ 50的项目$ 25后,你应该检查你的数据库,并确认物品的实际价格。
你不应该写代码的方式,价格是由客户端单独转移,使任何人都可以用价格= 0或0.01发送数据的商品/服务或任何任何款项。
更普遍的:永远不要相信客户端的数据。
是的,你需要服务器端的安全验证每数据发送到服务器。 例如您验证在JavaScript / jQuery的数据:
if($(this).val() != ""){
// post to my server page (mypage.cfm/php/asp)
}
但如果你不保护你的服务器页面,我可以张贴空数据UR服务器很容易,避免了JavaScript,所以u需要与其他验证脚本安全的服务器页面,例如:
<cfif val is "">
//dont post to my server ...
</cfif>
有时它是双重的工作,但我们有时会面对它....
与数据库的风险通常是:恶意数据,SQL注入,跨站请求伪造。
涅槃/ uglifying你的JavaScript可以提供帮助。 但是,你的用户能够轻松拍摄自己的请求数据,你做什么无关。 还有是为了防止用户通过乱码会没有明确的办法。
安全是唯一的真,当用户没本事你,尽管知道所有的源代码和配置。
有没有简单的解决方案的安全性。 下面是一些常规做法,以避免在大多数情况下问题:
使用HTTPS和POST请求。 拥有超过HTTPS POST请求,请求的数据都是加密的。 该URL暴露但那通常是正常的。 这可以防止中间人攻击的人,高度降低了隐私问题(如密码/信贷泄漏)。 如果使用GET请求,所有的数据都作为URL查询字符串传递。 这意味着一个很好的机会来改变你的数据的第三方。
服务器端验证始终验证在服务器端的数据。 用户可能是恶意的,并且有可能是在客户端的错误。 例如,计算在服务器端,而不是客户端的总价格。 否则,用户可以把一个0那里。
权限控制在允许的动作AKA授权集的限制,并限制其有效范围。 例如,不允许用户放置顺序代表他人。 不要让他们删除他们的行为历史。
生成令牌来防止CSRF一些图书馆可以防止CSRF。 或者你可以实现你自己的。 的主要概念是生成随机令牌和请求客户端传递回来。 这防止其他web站点从触发请求到服务器(与客户证书)
正确的备份和洛备份数据库定期将有助于从灾难(是的,他们会发生)恢复和跟踪哪些用户已通过登录模块来完成。