当您使用 GET 请求通过您的站点传递变量时,您是否在使用它们之前验证(正则表达式、过滤器等)它们?
假设您有 URL http://www.example.com/i=45&p=custform。你知道“i”总是一个整数,而“p”总是只包含字母和/或数字。是否值得花时间确保没有人试图操纵这些值然后重新提交页面?
当您使用 GET 请求通过您的站点传递变量时,您是否在使用它们之前验证(正则表达式、过滤器等)它们?
假设您有 URL http://www.example.com/i=45&p=custform。你知道“i”总是一个整数,而“p”总是只包含字母和/或数字。是否值得花时间确保没有人试图操纵这些值然后重新提交页面?
是的。毫无疑问。永远不要相信用户输入。
为了改善用户体验,可以(恕我直言)在客户端验证输入字段。这可以抢占到只导致相同表单和错误消息的服务器的往返行程。
但是,必须始终在服务器端验证输入,因为用户只能在 GET url 中手动更改输入数据或发送精心设计的 POST 数据。
在最坏的情况下,您最终可能会遇到SQL 注入,甚至更糟的是XSS漏洞。
大多数框架已经有一些内置的方法来清理输入,但即使没有这个,使用常规异常和查找表的组合来清理输入通常也很容易。
与任何用户输入一样,检查以确保它是您所期望的非常重要。所以是的!
是的,是的,三次是的。
当然,许多 Web 框架都会为您执行此操作,例如 Struts 2。
一个重要原因是检查sql 注入。所以是的,总是清理用户输入。
不仅仅是其他人在说什么。想象一个名为 nc 的查询字符串变量,当用户每页分别选择 10、50 和 100 个结果时,可以看到它的值分别为 10、50 和 100。现在想象有人将其更改为 50000。如果您只是检查它是否为整数,则每页将显示 50000 个结果,影响您的综合浏览量、服务器负载、脚本时间等。另外,这可能是您的整个数据库。当您有这样的规则(每页 10、50 或 100 个结果)时,您应该额外检查 nr 的值是否仅为 10、50 或 100,如果不是,请将其设置为默认值。这可以简单地是一个 min(nc, 100),因此如果 nc 更改为 25、75 等,它将起作用,但如果它看到任何高于 100 的值,它将默认为 100。
我想强调这是多么重要。我知道第一个答案讨论了 SQL 注入和 XSS 漏洞。SQL Injection 的最新进展是在查询字符串中传递二进制编码的 SQL 语句,如果它发现 SQL 注入漏洞,它将在数据库中的每个文本字段中添加一个 http://reallybadsite.com'/>。
作为 Web 开发人员,我们必须验证所有输入,并清理所有输出。
请记住,黑客不会使用 IE 来破坏您的网站,因此您不能依赖网络中的任何验证。
是的,尽可能彻底地检查它们。在 PHP 中,我总是检查类型 ( IsInt(i), IsString(p)
)。