如果尝试进行Ajax/XMLHttpRequest调用时发生某些网络类型错误,则XMLHttpRequest.status通常为"0".但肯定应该有一种方法可以告诉用户网络错误究竟是什么,例如DNS解析是否失败,或者连接是否被主动拒绝,甚至连接是否已经建立但是在发送任何有效的HTTP响应之前中止了?IE至少在JavaScript控制台中打印出一些额外的信息,例如
SCRIPT7002:XMLHttpRequest:网络错误0x2efd,由于错误00002efd无法完成操作.
但它不是很友好,我无法看到如何从javascript查询该信息转换成我可以向用户显示的内容.
我不介意是否必须以不同的方式为不同的浏览器实现,但我现在很难看到任何方式获取这些信息.
BTW至少我希望能够区分:
在任何情况下,返回有效的HTTP响应,但状态为200 OK,没关系 - 我可以得到一个明智的错误消息显示给用户.但对于其他任何事情,似乎没有办法区分各种可能的错误类型.在我的应用程序中,用户负责提供地址以发出Ajax请求,因此如果他们弄错了,我希望能够告诉他们请求失败的原因.
好吧,ASP.NET WebForms 现在已经是旧技术了,但在可预见的未来我们将继续使用它,我只是想看看是否可以引入一个非常基本的重放攻击预防机制。基本上,我们希望确保用户明确注销后,没有人可以重放旧请求并根据授权 cookie 自动对其进行身份验证,但我们仍然希望允许不希望使用永久授权 cookie 的用户使用永久授权 cookie。重新登录每个新的浏览器会话。根据我在后一种情况下观察到的情况,如果您退出浏览器并启动新会话,则cookie 标头中没有会话 ID - 只有表单授权 cookie。在这种情况下,我们希望允许自动身份验证(至少对于 GET 请求)。在“重播”情况下,cookie 标头中有一个会话 ID - 但 ASP.NET 实际上会使用相同的 ID 自动重新创建一个新会话。幸运的是,我们可以检测到这一点(通过检查 Session.IsNewSession 和 Request.Headers["Cookie"] - 尽管不是,奇怪的是,Request.Cookies 有时会包含会话 cookie,即使它不是由客户端发送的),因此它是如果客户端发送了用户注销时已关闭/放弃的会话的会话 ID,则可以强制重新登录。
但是...如果重放攻击故意省略会话 ID,那么当授权 cookie 是永久 cookie 时,就没有真正的方法可以将其与合法的浏览器请求区分开来。在这种情况下,您至少可以阻止“POST”请求,但重放攻击可能只是先发出 GET 来建立新会话,然后再发出 POST。我真正想要的是一种方法来确定一旦用户注销,用于授权该会话的 cookie 值就不再有效 - 我想这需要在数据库中存储一些内容(很可能是当前有效的列表) cookie 值),这似乎比目前合理的努力要多。但似乎其他任何事情(例如在表单上使用隐藏的随机数字段)都容易出现一个脚本,该脚本只是模拟用户使用永久授权 cookie 重新建立新会话,在这种情况下,他们将能够确定所需的内容因此,假设我是正确的,必须将某些内容存储在服务器端以跟踪(本质上)哪些授权 cookie 值仍然有效,是否有任何已知的低占用空间/众所周知的库做这个?
(顺便说一句,现在我已经在身份验证票证上使用了 IsPersistent 标志 - 如果这是 false,即用户已明确选择仅使用每个会话 cookie,知道他们将重新登录下一个浏览器会话,那么我可以可靠地阻止重放攻击。但如果为真,我只会阻止“POST”重放,这并不能提供太多真正的保护,但至少担心更复杂的重放攻击的用户可以通过始终选择每个会话来阻止它们验证)。
我需要能够从 SharePoint 列表中的项目查询旧字段值。我无法在服务器上执行代码(它需要使用 SharePoint Online/O365 才能开始)。到目前为止,我拥有的唯一 API 是 list.asmx GetVersionCollection SOAP 调用。这让我可以指定单个字段名称并返回一个 XML 结构,其中包含各种版本的值,以及修改时间和谁进行了更改 - 但没有可靠的方法来实际识别哪个版本版本(即 ID 或标签)。也就是说,如果我知道我需要从列表“文档”中项目 1 的版本 512 中获取 Title 值,我看不到如何可靠地解析结果以确定哪个条目是版本 512。虽然它们可能会在顺序,在许多情况下,当不存在字段值时(或者可能尚未创建该字段时),条目实际上会丢失。我尝试将修改日期与相应 FileVersion 项目的创建日期进行比较(我可以通过 CSOM 或 REST 获得),虽然它有时有效,但它并不可靠。我还查看了lists.asmx GetVersion API 的输出,但我也看不出这有什么用,因为所有版本的 Created 属性似乎总是文件最初创建的日期。
谢谢
迪伦
ajax ×1
asp.net ×1
cookies ×1
csom ×1
javascript ×1
replay ×1
security ×1
session ×1
sharepoint ×1