【问题标题】:Passing Auth User from PHP / Laravel to JavaScript将 Auth 用户从 PHP / Laravel 传递给 JavaScript
【发布时间】:2019-12-11 13:13:46
【问题描述】:

在一些 SO 答案中建议使用以下方法,将经过身份验证的用户详细信息从后端 (PHP/Laravel) 传递到前端 (JavaScript/Vue)。不过,我想确认一下它的安全性。

<script>
    window.App = {!! json_encode([
        'user' => Auth::user()
    ]); !!};
</script>

假设详细信息确实包含用户生成的输入(如姓名和用户名),那么使用这种方法将经过身份验证的用户详细信息传递给 JavaScript 是否存在任何安全隐患? JavaScript 代码能否安全地处理这些数据以授权用户操作和/或将任何这些数据输出为 HTML?

或者用户在注册过程中可以在名称/用户名字段中键入的内容是否会破坏此代码/造成安全问题?在将 json_encode() 的输出传递给 JavaScript 之前对其进行清理有什么好处吗?

编辑

例如,假设我从服务器获取此数据,使用json_encode() 将其传递给 JavaScript,然后使用 JavaScript 以 HTML 格式输出用户名。如果允许用户在注册期间在“名称”字段中输入任何内容(最多达到一定的字符限制),是否可以以任何方式利用这一点?

【问题讨论】:

    标签: javascript php laravel security authentication


    【解决方案1】:

    “JavaScript 代码能否安全地处理这些数据以授权用户操作”——永远不会,因为它是客户端的,并且根据定义不受您的控制。授权在服务器端完成。

    “或者用户在注册期间可以在名称/用户名字段中键入的任何内容可能会破坏此代码/造成安全问题?” - json_encode 对字符进行转义,以便您输出 JSON 的任何数据都是有效的。

    “将这些数据中的任何一个输出为 HTML?” - 不。您需要清理数据for HTML 输出。 json_encode 不知道 HTML 是什么。

    “在将 json_encode() 的输出传递给 JavaScript 之前对其进行清理有什么好处吗?” - 这不是在语言级别而是在应用程序级别决定的。如果允许用户输入任何个字符,那么您有责任确保他们不能以邪恶的方式利用它,因为只有您知道应用程序如何使用这些数据。

    “但是,我想确认它的安全性。” - 它与您了解在不同上下文之间传递数据的含义一样安全。在这种情况下,您传递的数据在服务器端上下文中是“安全的”,但在传递到客户端上下文时未选中可能不是“安全”的。

    TLDR:没有人可以在不知道您对这些数据做什么的情况下给您一个令人满意的答案。只需将其作为&lt;script&gt; 插入响应中就可以了。根据您的处理方式,使用所述数据客户端可能不安全。

    下面是一个为什么清理数据不好的例子:https://jsfiddle.net/v7pxn48j/ 如您所见,JSON 没有任何问题,但是将其中的一些解释为未经处理的 HTML。

    【讨论】:

    • 太棒了。正是我想确认的。
    猜你喜欢
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    相关资源
    最近更新 更多