我正在尝试将创建表单时需要记住的清单放在一起。我知道我需要过滤输入内容。我已经过滤错误的HTML和脚本,转义mysql,限制数据类型(电话号码是10+位数,带有培训扩展数字,电子邮件必须是电子邮件,字符串不能包含html或代码等),以及单词或字符限制(由空格分隔的4个字的最大名称等)。但我还应该做些什么以及做这些事情的好方法是什么?
此验证将在服务器上进行,但我正在寻找跨平台的最佳实践。数据将使用POST进入,所以我不必过于担心与网址混淆。此外,表单呈现,提示,js输入屏蔽被处理,几乎所有客户端的东西都已到位。
答案 0 :(得分:3)
确认最简单的术语:只接受您想要的内容。
例如,如果您的电话字段只应包含数字(不是特定的电话号码格式)且不超过20个数字,您可以根据正则表达式对其进行检查,以确保它是您想要接受的数字,即{ {1}}
另一个例子,Twitter。它只接受最多15个字符的用户名,字母数字和由下划线组成。因此验证正则表达式可能是:([0-9]{7,20})
表单验证也可以采用安全检查的形式。一种可以是蜂蜜灌封,形式有效等等。
表格Honey potting:防止表单提交的自动/垃圾邮件 表格有效期:检查表格加载的时间和表格提交的时间。如果它太短,表单可能由机器人提交。如果花费的时间太长,数据可能会过时并过期 CAPTCHA:另一级别的机器人预防/人类形式验证。
答案 1 :(得分:0)
永远伟大的粉碎杂志有一些很棒的提示: http://www.smashingmagazine.com/2009/07/07/web-form-validation-best-practices-and-tutorials/
但如果我可以提供自己的:
当然,所有这些都假设您正在使用网络表单。
答案 2 :(得分:0)
Commenter S. Lott是正确的:框架会自动解决转义问题。如果您没有使用显式框架,那么至少,用于访问数据库的实用程序函数和页面上的显示数据应分别针对SQL和HTML进行转义。如果您不得不担心在验证码中转义,迟早会犯错误,而且一些十二岁的脚本小伙子会用马色情内容替换您网站的内容。
答案 3 :(得分:0)
在上下文中有意义的东西是好的,没有意义的东西是坏的。
如果此网站过滤了HTML,那么我们就无法提供HTML示例。相反,它处理HTML以便输出转义,而不是HTML。
小心过度验证。 <不一定是坏的,人们会使用各种各样的理由<,>尤其是&。
同样地,虽然Robert '); DROP TABLE Students;--不是你想在学校注册的人,但如果你的预防意味着O'Brien,O'Tierney,O'Donovan和O'Flanagan无法注册,当O'Donnell被拒绝时,他会认为这是反爱尔兰的种族主义并起诉你! (更现实的是,我确实知道爱尔兰的人们在SQL注入预防脚本阻止或破坏他们的姓氏时会去寻找竞争对手 - 尽管他们更常发现另一个不是<的网站/ strong>防止注射,因为它们的名字会以某种方式失败。)
验证,与安全检查相反,是确保某些东西可以合理地反映现实。实际上,个人姓名中有“个人姓名”,公司和城镇名称中包含&amp;在所有这些中,以及阻止将有效数据转换为无效的“验证”。实际上,信用卡号码长16位(一些借记卡19位)并通过luhn检查,电子邮件地址有用户信息部分,@和主机名有MX记录。人们的名字永远不会是零字符。这是验证。如果真的无效,则拒绝(而不是逃避)。
答案 4 :(得分:0)
您可能需要查看OWASP http://www.owasp.org/index.php/OWASP:About。特别是如果你打算处理信用卡。