您应该在HTML表单文本字段中检查什么?

lyn*_*ynn 0 html php forms security

我正在编写一个PHP脚本来从提交的表单中获取文本框数据.这些是简单的文本框,我不想接受任何HTML标记.我想我至少应该使用strip_tags()和addslashes().还要别的吗?我不介意限制输入到字母数字,我应该使用正则表达式来寻找非标准字符吗?

这是一个简单的表单,实际上(呃)通过电子邮件发送给处理它的人.(遗憾的是没有数据库.)这是简单的数据,名字和姓氏.

编辑:我也想知道我应该寻找什么.合理输入过滤的共识是什么?

cle*_*tus 6

使用PHP过滤器功能.

您可以使用它们来清理输入和验证输入(例如电子邮件地址).

验证有两种方法(这也适用于安全性和许多其他方面).

首先,您可以默认允许除明确禁止的内容之外的任何内容.或者你可以默认禁止除了特别允许的所有内容.

一般来说,后一种方法更安全,应该被使用,除非你有令人信服的理由不要(例如,它很难知道什么是允许的,你正在为不被认为是一个用户的用户做一个应用程序安全威胁等).

但是你必须小心使用它.对于人们的名字,像'和 - 这样的字符是完全有效的,但天真的实现可能会限制它们.您通常希望避免的是:

  • SQL注入:总是在任何输入上使用mysql_real_escape_string() ;
  • XSS(跨站点脚本):一般来说,您应该从用户输入中删除HTML标记.当然,您有时必须允许它们(例如,富文本编辑器框),但即使在这些情况下,您将拥有一个允许的标记列表,您应该删除所有其他标记(尤其是标记); 和
  • 通常你应该删除低字符(低于ASCII 20?左右); 和
  • 根据您的国际化要求,您可能需要删除高字符(ASCII 127以上).

一个好的默认值是:

$var = filter_var($var, FILTER_SANITIZE_STRING);
Run Code Online (Sandbox Code Playgroud)

但为这种情况选择合适的过滤器.