提问人:Nils 提问时间:11/17/2023 更新时间:11/17/2023 访问量:26
我应该在 Laravel 的输入中使用 HTMLEspecialchars 吗?[复制]
shold i use htmlspecialchars in laravel at input? [duplicate]
问:
在 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 函数保存到数据库之前,您甚至会使用它吗?
答:
-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)
]);
}
评论
{{ }}
“ - 这就是为什么没有必要清理所有用户输入的原因。只要您不使用 ,该标签将仅以纯文本形式输出。这是执行RTE(富文本编辑)时的常见问题,例如支持HTML和/或Markdown的描述字段。将该标签添加到该字段,然后通过输出将允许它起作用。因此,它主要归结为用例,以及永远不要相信用户输入并使用安全编码实践的黄金法则。{!! !!}
<script>
<script>
{!! !!}
alert()