今天我和我的同事就我们的应用程序应该接受哪些字符进行了(有点激烈的)讨论。这是由发现您可以在搜索框中输入任何内容而提示的,应用程序将尽职尽责地按该字符串执行搜索。但是,这同样适用于应用程序中的所有文本框,而不仅仅是搜索框。
我的同事认为,最佳实践(从安全角度来看)是将允许的字符限制为某些字母、数字和符号子集。这可以防止用户输入各种不可打印的 Unicode 控制字符等。
另一方面,我认为这只会惹恼用户并且不会提供任何额外的安全性。我认为最好的做法是让您的应用程序接受任何内容,然后使用正确的编码函数(以及参数化查询,如果它们可用)来确保输入的字符串未经修改通过并按输入显示/使用。如果用户输入垃圾,他会看到垃圾,但系统会正常工作。
这里的行业最佳实践是什么?
补充:好像我还不是很清楚。问题是关于服务器端的,假设是在使用字符串时所有正确的编码/转义都到位(例如,使用 SQL 参数、用于输出到 HTML 的 HtmlEncode 等)。鉴于所有这些,限制从客户端到达的允许字符是否仍然有意义?