我应该在 Laravel 的输入中使用 HTMLEspecialchars 吗?[复制]

shold i use htmlspecialchars in laravel at input? [duplicate]

提问人:Nils 提问时间:11/17/2023 更新时间:11/17/2023 访问量:26

问:

在 Laravel 10 中,我有一个 userController,其功能如下:

public function login(Request $request){    
    
    $userInputs = $request->validate([
        'username' => ['required', 'max:100', 'exists:users,username'],
    ]);

    //more code ....
}

但是我注意到,用户可以在数据库中带来这样的东西:

<script> alert("hacked"); </script>

这没有进一步的问题,因为 blade 使用 {{ }} 的 htmlspecialchars 函数转义输入。

但我不喜欢五月数据库中有不好的东西的想法。 也许我稍后需要在我的应用程序中调试一些东西,但我忘记了这一点。

因此,我尝试在我的代码中实现htmlspecialchars函数。 但是,当我在验证函数之后使用它时,它会检查用户名是否存在于数据库中“exists:users,username”,然后将其保存在数据库中,“exists:users,username”函数将不再起作用。

但是没有计划在验证中实现。但它需要在验证之前执行。我还希望在验证函数中进行所有验证,而不是我之前必须编写的内容。

你会怎么做? 或者,在将 htmlspecialchars 函数保存到数据库之前,您甚至会使用它吗?

Laravel HTMLSPECIALCHARS

评论

0赞 ceejayoz 11/17/2023
具体而言,对于用户名,您可以考虑将用户首先可以创建的用户名限制为可接受的字符集。
1赞 Tim Lewis 11/17/2023
“这没有进一步的问题[...]替换为 {{ }} - 这就是为什么没有必要清理所有用户输入的原因。只要您不使用 ,该标签将仅以纯文本形式输出。这是执行RTE(富文本编辑)时的常见问题,例如支持HTML和/或Markdown的描述字段。将该标签添加到该字段,然后通过输出将允许它起作用。因此,它主要归结为用例,以及永远不要相信用户输入并使用安全编码实践的黄金法则。{!! !!}<script><script>{!! !!}alert()
2赞 ceejayoz 11/17/2023
(对于富文本编辑器,像 symfony.com/doc/current/html_sanitizer.html 这样在输出过程中只允许可接受的 HTML 标记是要走的路)

答:

-1赞 aynber 11/17/2023 #1

您可以使用 FormRequest 来验证您的登录名,也可以使用它在验证用户名之前转换用户名。您将创建 FormRequest,如文档中所示,然后将此函数添加到 FormRequest:

protected function prepareForValidation()
{
    $this->merge([
        // We are exploding the role field from `role-1` to `role` and `1`
        'username' => htmlspecialchars($this->username)
    ]);
}