【问题标题】:Javascript server side calls and MVC3?Javascript服务器端调用和MVC3?
【发布时间】:2012-01-30 01:03:36
【问题描述】:

我正在使用 .Net MVC3 开发一个应用程序,该应用程序通过页面上的 js 引用执行一些 Javascript。

脚本启动后,会返回一些 javascript 并在客户端执行。在此过程结束时,我需要回调 mysite.com 以发送与客户端相关的详细信息,例如浏览器、IP 地址等。

为了实现这一点,我使用异步回调到我的服务器来发送数据:

    xmlhttp.open("GET", "http://mysite.com/record_values/" +
        navigator.appVersion + "/" +
        navigator.cookieEnabled + "/" +
        encodeURIComponent(document.URL), 
        true);

是否有任何其他推荐的方法可以将此信息返回到我的服务器进行记录?

谢谢。

【问题讨论】:

  • 澄清一下,HTTP 方法“POST”
  • 你唯一的选择是新的“网络套接字”设施。
  • @Daniel A. White - 有道理。然后我也不必担心使用 encodeURIComponent。
  • @Pointy - 我查看了 JS websocket 选项。我不想让站点 1 上的 Javascript 有效负载很小。我认为异步帖子仍然会很快,不是吗?

标签: javascript asp.net-mvc-3 asynchronous


【解决方案1】:

请注意,您将要查找的某些信息(浏览器版本)已在用户代理字符串中传递。 Cookie 支持不是。引荐来源网址应该已经在标题中(因此可能不必传递 url)

正如丹尼尔所说,这应该是 POST。 100% 绝对是一个帖子。除了检索之外的任何数据操作都应始终通过帖子完成(实际上是 http 规范的一部分)

此外,我还会传入一个 MVC AntiForgeryToken(@Html.AntiForgeryToken() 和 [ValidateAntiForgeryToken] 在控制器方法上),以帮助确保攻击者不会因重复调用而使您的服务器/数据库过载。

【讨论】:

  • 我读到 (stackoverflow.com/questions/4757890/…) 防伪令牌在用户尚未经过身份验证的网站的公共部分是无用的。发布请求将来自站点 1 上的 Javascript,将数据发送到 mysite.com/xxxx/ 上的控制器。是否有可能避免这样的 CSRF 攻击?可能最适合提出新问题?
  • 如果这是一个任何人都可以访问的面向公众的应用程序,那么是的 - 它相当没用。如果它是用于内部的,那么我会考虑一些令牌方案,尽管不幸的是内置支持不提供一次性令牌。请注意谁可以调用最终将数据放入数据库的方法。攻击者可以很容易地直接通过对您的数据库进行 DoS 攻击来利用它,或者使用 XSS 之类的东西让每个访问该站点的浏览器一遍又一遍地调用它来淹没数据库。只是需要考虑的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 2011-08-23
相关资源
最近更新 更多