最近 Testerhome 最近被人攻击,用的也是 Homeland,Ruby China 也有类似的问题。有人在搜索框构造这样一个搜索
https://ruby-china.org/search?q=..%2F..%2F%2F..%2F..%2F%2F..%2F..%2F%2F..%2F..%2F%2F..%2F..%2F%2F..%2F..%2F%2F..%2F..%2F%2F..%2F..%2F%2Fetc%2Fpasswd
搜索内容为 ../..//../..//../..//../..//../..//../..//../..//../..//etc/passwd
../..//../..//../..//../..//../..//../..//../..//../..//etc/passwd
结果在 PG 那里资源就耗尽了。
貌似是.与/的组合重复太多引发的血案.....
.
/
目前粗暴点就先用 uniq 处理了,应该不影响简单的搜索过程,不知道是否有优雅的解决方案?
限制 term 长度?或者过滤掉特殊字符?
限制 ter 的长度好像有点粗暴。 我也试过过滤啦,不过好像不妥。过滤掉 / 总觉得怪怪的。
过长和特殊符号本来就不是正常用户会输入的,完全可以干掉。
对于后端来讲,不限制输入长度的话,可以算作 flaw 了。
后端没义务让所有场景都能返回,但有义务保服务对绝大多数人是可用的。
好奇这种情况下,pg 也没办法提供其他查询和写入了吧?
你说的也有道理。确实限制长度也是一种做法。
我也很好奇,pg 没有办法自己防一下么