为什么通过HTTP进行的AJAX身份验证被认为是不安全的?

5
让我们考虑下一种情况:假设我有一个网络应用程序,用户认证是通过模态对话框窗口进行的(假设当用户点击登录按钮时,会发送ajax请求,并根据回调结果关闭窗口或显示错误内容),并且我仅使用HTTP协议。为什么这被认为不是一种安全的做法呢?
此外,请确保将模态对话框窗口考虑在内,因为这是关键信息。如果模态性被破坏,可能会显示在对话框窗口下方的某些数据并且可以被访问。
这个问题包括以下两点:
1.如何利用ajax调用来破坏应用程序的安全性? 2.Ajax HTTP是否比常规表单HTTP更不安全?

1
谁认为这不安全?或者谁认为这比常规表单不够安全 - zerkms
你能澄清一下问题吗?你是在问Ajax HTTP比Ajax HTTPS不安全吗?还是在问Ajax HTTP比普通表单HTTP不安全? - UpTheCreek
除非您在将密码发送到客户端之前使用SHA或MD5进行加密,否则密码以明文形式传输。无论是AJAX还是其他类型的请求。 - Rosdi Kasim
@den-javamaniac:嗯,没有“为什么”。你的假设是错误的。 - zerkms
1
@Rosdi:如果你已经获取了MD5加密的密码,你可以始终使用相同的MD5字符串重复相同的请求并获得认证 :-)(除非你使用某种额外的令牌) - zerkms
显示剩余2条评论
6个回答

10

谁跟你说的 - 他错了。通过post方法实现的ajax与常规表单post方法相比并不不够安全。因为它们是同一件事情

更新1根据最新编辑:

  1. 你不能这样做
  2. 不可以

论点:AJAX请求与其他任何http请求(例如由html表单发送的请求)是一样的。绝对一模一样。因此,按定义,它既不能更加安全也不能更不安全。

我不知道该如何更详细地解释或说些什么:ajax是一个http请求。就像当你打开SO页面或者提交SO问题表单时你的浏览器所做的请求一样。

我可以把你的问题重新表述为“为什么A比A不安全”。它的答案是:A并不比A不安全,因为A就是A :-S


你能否在回答中附上一些参数呢? - Denys S.
@zerkms:你说得对,谢谢你让我清楚地看到了你的观点。但我不理解的是:在简单的表单认证中,当按下登录按钮时,只会发送请求,就这样而已;但如果使用对话框窗口,则会有一系列的js调用(虽然我不是js专家),如果说页面底部附加了某种js,那么它可以被简单地更改,并导致任何js允许你执行的操作。如果我能做到这一点,我就可以轻松地发送两个请求——一个用于登录,另一个用于将凭据发送给某人。那么接下来呢(如果可能的话)? - Denys S.
@den-javamaniac:也许你能告诉我们,是如何让你相信ajax不够安全的? - UpTheCreek
2
@den-javamaniac:关于您最后的评论。您完全可以在页面中添加一些JS来使用常规表单完成完全相同的操作,这没有任何问题。 - UpTheCreek

2

任何敏感数据都应通过HTTPS通道传输。GET数据发送在查询字符串中。POST数据发送在HTTP请求头中。Ajax可以同时执行两者。这两种方式都不安全。您需要使用通道级别加密来确保真正的安全。


1

我认为问题在于你正在使用http。无论如何,它都不会安全。如果你使用https,ajax请求将与html表单一样安全。

我的建议是使用https,这样你就可以解决所有问题了。


1

HTTP不适合传输私人数据,因为数据以明文形式传输。这可能会在客户端和服务器之间的任何地方被拦截(例如Wi-Fi)。使用HTTPS的Ajax将更加安全。


但他不是在问为什么使用ajax会降低安全性吗? - UpTheCreek

0

0

由于浏览器在处理HTTP和HTTPS时使用相同的网络堆栈,无论是AJAX还是其他方式,它们之间没有区别。所有的头部信息、cookie、身份验证等都完全相同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接