我想知道拥有类似于以下的 URL 是否存在安全风险
http://www.mytestapp.com/results?limit=1234
limit GET 参数随后将被检查为有效整数并直接传递到查询中。
如果用户将此参数更改为非常大的数字会发生什么情况?对于一个巨大的数据库,这会导致类似于拒绝服务的效果吗?
设置可变结果限制的最佳做法是什么?
最佳答案
不要只是将 GET 变量直接传递到您的查询中。如果你这样做了,那么我可以像这样进行 SQL 注入(inject):
http://www.mytestapp.com/results?limit=1%3BDROP%20TABLE%20USERS
你的查询最终会是这样的:
select * from some_table where parameter = 3 limit 1;DROP TABLE USERS
我假设您正在尝试进行分页。如果是这样,你会想要这样的东西:
http://www.mytestapp.com/results?page=1&size=10
然后,在您的后端,验证 page
和 size
都是整数,并且都是合理的大小。也许对 size
的大小设置限制,例如,可能只是 10 到 100 的倍数。
关于mysql - 将限制 GET 参数直接传递给 MySQL 安全问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9724548/