php - 输入清理 VS 验证

标签 php

我已经使用 php(以及前端的 js)对所有输入数据实现了输入验证。我尽可能地进行类型转换,根据正则表达式验证诸如电子邮件之类的内容,确保下拉值只是我期望的值,而且在许多情况下我只期望一个字符串我有一个运行的正则表达式只允许字母、数字和空格。任何不符合这些规则的行为都会导致表单验证失败,并且不会运行任何 sql 查询。

话虽如此,如果我的表单通过验证,我会假设输入到我的数据库(我正在通过 pdo 执行)是安全的,然后在输出时进行转义。

那么为什么我需要输入清理?

最佳答案

如果你有非常严格的服务器端验证,你不需要 sanitizer 。例如。根据/^[a-z0-9]{5,25}$/验证字符串不需要任何清理(删除非字母数字字符没有任何意义,因为它们无论如何都不应该通过)。

只需确保您可以验证所有数据,如果这是不可能的(例如,对于 html,它往往有点困难),您可以使用转义策略或 html 净化器之类的东西。

有关 XSS 预防的转义策略的概述: 见https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

了解不同的安全威胁: https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet

关于php - 输入清理 VS 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17473586/

相关文章:

php - 如何在 heredoc 中制作 php 转义括号?

javascript - 使用 Windows.print().. 打印表单的某些字段。

php - 如何在 PHP 中发送电子邮件附件

php - 动态表单字段创建并保存在数据库php mysql中

javascript - 使用laravel和vuejs从数据库获取数据

javascript - CAKEPHP 表单检索

php - 将变量插入 header 位置 PHP

javascript - 具有可点击区域的网页图像,将数据发送到服务器脚本并保留在同一页面上,无需刷新

php - 无法通过引用传递参数 2 - uuid PDO

PHP 货币格式尾随零