【问题标题】:Django and Java Applet authorization failedDjango 和 Java Applet 授权失败
【发布时间】:2012-11-11 10:16:19
【问题描述】:

我正在用 allauth 构建一个 Django 应用程序。

我有一个需要身份验证的页面,我在其中放置了一个 Java 小程序。这个小程序对返回 Json 对象的其他页面(同一个 django 项目的)执行 GET 请求。

小程序使用 JSObject 从父网页获取 CSRF 令牌。

问题是我想为所有页面设置身份验证控制,但我无法从小程序的父网页获取 sessionid cookie,因此它无法执行 GET(也无法执行 POST ) 来获取(或保存)数据。

也许这是一个简单的方法来获得这个,但我是一个新手,我还没有找到任何东西。

如果您需要什么,请随意询问。

谢谢。

编辑:

我在楼下写过吗,发现sessionid cookie被标记为HTTPOnly,所以现在的问题是哪种方式让小程序最安全做 POST 和 GET 请求。 例如,可以在页面中创建一个 JS 方法,获取数据并将其传递给小程序吗? 也许以同样的方式我可以做 POST?

编辑:

我使用页面中的 jquery 调用成功获取了数据。现在的问题是代码抛出了一个InvocationTargetException。找到了问题的位置,但是不知道怎么解决。

这里是 Jquery 代码:

  function getFloor() {

        $.get(
              "{% url ... %}",
              function(data) {
                    var output = JSON.stringify(data);
                    document.mapGenerator.setFloor(output)
              }
        );}

这里有小程序的两个功能。 **部分是问题的根源。

  public void setFloor(String input) {
    Floor[] f = Floor.parse(input);
}

  public static Floor[] parse(String input) {

    **Gson gson = new Gson();**

    Floor[] floors = gson.fromJson(input, Floor[].class);

    return floors;
}

这里是我服务器上的日志,您可以在其中看到小程序尝试从服务器(而不是小程序)加载 Gson 的库

  "GET /buildings/generate/com/google/gson/Gson.class HTTP/1.1" 404 4126

有人可以帮助我吗?

【问题讨论】:

  • 现在,为了测试目的,我在自定义会话值中传递 sessionid 的值,但我认为这不是最可靠的方法。 ..
  • 你有禁用 CSRF 中间件的选项吗?在适当的位置,您可以推出定制的中间件。
  • 问题不是csrf而是sessionid。在每种情况下,我都决定在小程序实例化时使用会话值加载小程序的数据。在我的测试中,我没有发现任何使用 JQuery GET 函数的安全问题。所以我将使用 POST 结果。
  • new Gson() 不太可能抛出异常,更有可能是下一行(Gson 不知道如何转换为 Floor[])。如果是您指出的那一行,则可能是您的 applet 标记(在 HTML 中)中没有包含 Gson jar 文件。

标签: java django applet session-cookies


【解决方案1】:

你可以在你的小程序中做这样的事情:

String cookies = JSObject.getWindow(this).eval("document.cookie").toString();

这将为您提供以分号分隔的页面的所有 cookie。

【讨论】:

  • 它不工作。这里的问题是 cookie 被标记为 HTTPOnly,因此“不可能”从 Java 或 Js 中获取它。
  • 哈哈。所以你想绕过你自己的安全?为什么不让小程序再次向服务器发出请求,以便它可以直接获取 CSRF 令牌?否则你基本上是在试图绕过你自己的安全。
  • :P 不幸的是,我现在才发现这个问题。不,现在我不是在试图绕过我的服务器,而是在不使用 csrf 或 sessionid 的情况下解决这个问题。
  • 我在这里打开了另一个问题:stackoverflow.com/questions/13546506/…,因为这似乎是一个更复杂的问题。
猜你喜欢
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 2020-04-03
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多