【问题标题】:Laravel 7 Sanitizing Form DataLaravel 7 清理表单数据
【发布时间】:2020-12-14 18:01:14
【问题描述】:

我是 Laravel 7 的新手,想知道是否有一个开箱即用的优雅解决方案来清理 HTML 表单输入?或者我可以下载您推荐的受信任的第三方软件包?这是用于我将存储在数据库中的数据。感谢您的帮助。

【问题讨论】:

    标签: laravel forms laravel-7 sanitization sanitize


    【解决方案1】:

    一种推荐的开箱即用的数据清理方法是使用 PHP 附带的 filter_var 函数和不同的 sanitize filters。顺便说一句,这也是验证输入的一种很酷的方法,请查看types of filters 了解更多信息。

    在 Laravel 项目中工作时,我喜欢使用 voku/portable-ascii library,因为它已经是一个框架依赖项。清理输入、删除不可打印字符以及将任何输入通常转换为 ASCII 以及音译和诸如此类的功能,这是一个很好的分类。它并不总是完美的,但通常足够好并且可以完成工作。

    这始终取决于您要消毒的内容、方式和原因。在许多情况下,如果您坚持最佳实践,则根本不需要清理输入。使用 Eloquent 或查询生成器时,当您输出数据时,您的数据会自动转义和检索,例如通过{{ $data }},它们也将被正确转义。

    在某些情况下您应该更加谨慎,尤其是当您自己处理原始用户输入并可能以命令行参数、文件名等形式将其传递给系统时。在这些情况下,尽可能限制和必要时允许通常是一个好主意。有时,一个好的旧preg_replace('/[^0-9A-Z_-]/i', '', $subject) 是正确的选择。如果您想尽可能宽容,请尝试上述建议。

    【讨论】:

    • 我应该在我的问题中说明这一点。我需要清理的数据非常标准:姓名、电子邮件地址、电话号码和一个复选框。而已! :-)
    • 你提到的 PHP filter_var 函数看起来很酷,它确实可以发送电子邮件,但奇怪的是省略了美国电话号码。
    • 清理过滤器将为您清理电子邮件。通常不需要对名称进行清理,除非您想去除烦人的图标、RTL 字符等。电话号码...好吧,您真的要在这里进行消毒或验证吗?消毒很容易:preg_replace('/[^0-9\(\)\- ]/', '', $number) 应该会处理大部分内容。此外,您还可以使用 HTML5 表单验证,请参阅 developer.mozilla.org/en-US/docs/Web/HTML/Element/input/email 或 tel 等。有关验证请查看 laravel.com/docs/7.x/validation
    • 省略美国电话号码并不奇怪。不要将消毒与验证混为一谈。要对电话号码进行合理性检查,您需要在不同国家/地区非常具体的规则集甚至数据库。如果您需要非常基本的验证,正则表达式是您的朋友。关于该主题已经有数百个答案,例如stackoverflow.com/questions/9776231/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    相关资源
    最近更新 更多