5

我们有一个包含名字和姓氏字段的表单。我被要求允许下划线。我不知道任何使用下划线的 sql 注入,但我也不知道任何人的名字中有下划线。是否有充分的理由允许或不允许名称中的下划线?

编辑:我正在使用参数和服务器端验证。这是通过 jQuery 验证插件进行客户端验证的。

编辑2:我并不是要讨论我是否应该进行任何验证...我只是想知道是否有任何令人信服的理由接受下划线,例如我应该接受爱尔兰人或连字符. 基于此,我接受了奥伦的回答。

4

6 回答 6

15

您应该尽可能自由地使用您允许的名称。没有充分的理由禁止下划线,那么为什么要这样做呢?有许多关于人们试图使用不允许其真实姓名的软件的恐怖故事。查看Falsehoods Programmers Believe About Names了解您不应该做出的假设。

于 2010-07-23T14:23:00.627 回答
12

不要使用白名单来阻止 SQL 注入!

你遇到过O'Neill吗?

相反,使用参数。

不过,我承认,白名单比黑名单更有效


回复:编辑:
你根本不应该做这样的验证。
如果您的服务器端代码可以处理它,那么 name 没有任何问题--'!@--_
如果您的服务器端代码无法处理它,它应该.

于 2010-07-23T14:20:32.033 回答
3

你做错了验证。在防止 sql 注入时,只需使用占位符或您的数据库库的转义函数来转义数据。那么,您在名称中使用什么字符并不重要。

于 2010-07-23T14:21:41.920 回答
2

您需要允许使用撇号和连字符(O'Reilly,Double-Barrel)。不过,从未听说过名称中有下划线。

于 2010-07-23T14:22:13.733 回答
1

理想情况下,您应该能够允许任何字符并且不会遇到 SQL 注入问题,因为您使用的是参数化查询等。

你不允许'吗?你觉得 O'Reilly 先生喜欢什么?

于 2010-07-23T14:21:56.037 回答
1

如果您假设我们不知道带有下划线的名称来防止下划线,那么您会为其他数十个(数百个)其他“特殊字符”做同样的事情吗?

除非有某些理由阻止下划线,否则我会让用户自己输入他们想要的名字。

于 2010-07-23T15:47:45.803 回答