我们有一个包含名字和姓氏字段的表单。我被要求允许下划线。我不知道任何使用下划线的 sql 注入,但我也不知道任何人的名字中有下划线。是否有充分的理由允许或不允许名称中的下划线?
编辑:我正在使用参数和服务器端验证。这是通过 jQuery 验证插件进行客户端验证的。
编辑2:我并不是要讨论我是否应该进行任何验证...我只是想知道是否有任何令人信服的理由接受下划线,例如我应该接受爱尔兰人或连字符. 基于此,我接受了奥伦的回答。
我们有一个包含名字和姓氏字段的表单。我被要求允许下划线。我不知道任何使用下划线的 sql 注入,但我也不知道任何人的名字中有下划线。是否有充分的理由允许或不允许名称中的下划线?
编辑:我正在使用参数和服务器端验证。这是通过 jQuery 验证插件进行客户端验证的。
编辑2:我并不是要讨论我是否应该进行任何验证...我只是想知道是否有任何令人信服的理由接受下划线,例如我应该接受爱尔兰人或连字符. 基于此,我接受了奥伦的回答。
您应该尽可能自由地使用您允许的名称。没有充分的理由禁止下划线,那么为什么要这样做呢?有许多关于人们试图使用不允许其真实姓名的软件的恐怖故事。查看Falsehoods Programmers Believe About Names了解您不应该做出的假设。
你遇到过O'Neill
吗?
相反,使用参数。
不过,我承认,白名单比黑名单更有效
回复:编辑:
你根本不应该做这样的验证。
如果您的服务器端代码可以处理它,那么 name 没有任何问题--'!@--_
。
如果您的服务器端代码无法处理它,它应该.
你做错了验证。在防止 sql 注入时,只需使用占位符或您的数据库库的转义函数来转义数据。那么,您在名称中使用什么字符并不重要。
您需要允许使用撇号和连字符(O'Reilly,Double-Barrel)。不过,从未听说过名称中有下划线。
理想情况下,您应该能够允许任何字符并且不会遇到 SQL 注入问题,因为您使用的是参数化查询等。
你不允许'
吗?你觉得 O'Reilly 先生喜欢什么?
如果您假设我们不知道带有下划线的名称来防止下划线,那么您会为其他数十个(数百个)其他“特殊字符”做同样的事情吗?
除非有某些理由阻止下划线,否则我会让用户自己输入他们想要的名字。