我知道在服务器上处理用户输入并将其插入数据库时,我们需要使用准备好的语句来防止sql注入。我注意到一些关于html的东西 <input type="date"> 例如,选择日期时,检查元素后不显示值;但是,文本框、复选框等会显示值。你可以在这里试试。这是否意味着日期输入不易受sql注入攻击,因为您无法修改其值?或者我走错了路?
<input type="date">
xu3bshqb1#
您走错了方向,因为您错误地假设用户不能修改值,而您真正要证明的是,非恶意用户不能对值进行细微的修改或错误的格式化。这是两件完全不同的事情。实际上,使用准备好的语句没有任何有效的例外。有多少教程和示例展示了如何使用字符串连接构建sql语句,这真是一个悲剧。不应该这样做。有些情况下“理论上”是安全的,但这不应该是你思考过程的一部分。即使您从自己的数据库中获得了数据,您仍然不能信任它,也不需要考虑某个值是否受sql注入的影响,因为答案总是“是”唯一的问题是开发有多困难,可能涉及多少层间接寻址。恶意用户通常不会按预期方式使用您的应用程序。如注解中所述,命令行工具 curl 可用于向服务器提交与浏览器发送的请求无法区分的请求。所有来自客户的信息都是可疑的,但是即使不是来自外部的信息也应该被认为是潜在的危险。
curl
1条答案
按热度按时间xu3bshqb1#
您走错了方向,因为您错误地假设用户不能修改值,而您真正要证明的是,非恶意用户不能对值进行细微的修改或错误的格式化。
这是两件完全不同的事情。
实际上,使用准备好的语句没有任何有效的例外。有多少教程和示例展示了如何使用字符串连接构建sql语句,这真是一个悲剧。不应该这样做。有些情况下“理论上”是安全的,但这不应该是你思考过程的一部分。
即使您从自己的数据库中获得了数据,您仍然不能信任它,也不需要考虑某个值是否受sql注入的影响,因为答案总是“是”
唯一的问题是开发有多困难,可能涉及多少层间接寻址。
恶意用户通常不会按预期方式使用您的应用程序。如注解中所述,命令行工具
curl
可用于向服务器提交与浏览器发送的请求无法区分的请求。所有来自客户的信息都是可疑的,但是即使不是来自外部的信息也应该被认为是潜在的危险。