最近的攻击让我想到的一些事情

2013-08-22 03:00:37 +08:00
 Livid
或许这些你都已经经历过了,那么你就把下面的列表当作是小朋友的学习心得吧。

1. 下一个项目,能不用 MySQL 就尽量不用,尤其不要用任何的 ORM。虽然方便,但是性能损耗太大了。

2. 所有页面的生成时间,目标应该是 10ms 以下。如果缓存设计得足够好的话,5ms 以下。目前我们的很多页面的生成时间接近甚至超过 100ms,这样的话,网站太脆弱了,会需要加入太多其他的应用层的防御措施。

3. Tornado 是一个经得住考验的框架。本身性能非常好。

4. 如果在 supervisor 中同时启动太多 Tornado process,那么在每次代码更改的时候,新代码的部署过程可能会造成短暂的 CPU 压力。

5. 根据频次计算的防攻击规则,可能会和 CDN 及某些终端加速机制(比如 Opera Mini 的代理)不兼容,除非你能够把这些根据频次计算的防攻击规则,也部署到 CDN 的边缘节点上,并且有足够灵活的 UI 和部署机制让你能够试验不同的规则。

6. 所有的防攻击规则都会造成误伤,并且可能会影响搜索引擎的收录,因为各种 bot 很容易中枪。

如果你最近的访问因为我们的某些防攻击规则受到影响,请给我邮件 livid at v2ex.com 并附上你的 IP(前三段即可)。

大力感谢 @ptcracker 在最近这段时间给予的帮助。
15288 次点击
所在节点    Python
67 条回复
SamRaper
2013-08-22 12:17:48 +08:00
@livid 可以考虑用 AJAX 了,可以减少不必要的开销
ipconfiger
2013-08-22 12:26:19 +08:00
@pubby rpush是纳秒级别的操作,且,每个请求慢1ms,但是总体的处理能力上了一个数量级的台阶,还是划算的。你不能单独看一个请求的得失而忽略了总体的吞吐量
lj0014
2013-08-22 12:39:12 +08:00
总得来说就是让应用本身可以扛更多量
另外MySQL现在怎么这么不让人待见了。。
ywencn
2013-08-22 12:40:34 +08:00
哪有靠提高性能来抗攻击的
ipconfiger
2013-08-22 12:43:51 +08:00
@SamRaper 这个情况是上了ajax反而会增加更多的请求,雪上加霜,ajax并不能解决性能问题
ptcracker
2013-08-22 12:48:23 +08:00
如果时间允许,防攻击应该可以做到更好。
Attacker 和 Defender 其实比的就是个 idea,是脑力的较量。
ptcracker
2013-08-22 12:49:24 +08:00
@ywencn 提高性能是减少被 DoS 可能的一个途径,严格意义上来说是“防攻击”的一种技巧,在一定程度上是会起到作用的。
ipconfiger
2013-08-22 12:50:30 +08:00
@ywencn 主要是性能问题造成的可攻击的入口,比如找准一个慢查询,也就是LZ说的200ms那个,很轻松的就能让一个网站失去响应。
nichan
2013-08-22 12:56:51 +08:00
目测用户设置页面是那个慢查询?
luikore
2013-08-22 13:18:07 +08:00
@ipconfiger redis cache 住瓶颈就好了... 扔掉 ORM 200ms 最多也就变成 50ms 吧, 没有擦车的效果好.

另外伪造瓶颈页面也是一种防御手段 -_-

找到根源效果更治本, 例如发这个帖把攻击者钓出来...
ipconfiger
2013-08-22 14:12:38 +08:00
@est gevent的数据库访问也还是阻塞的
ipconfiger
2013-08-22 14:13:43 +08:00
@est 起码是对mysql的访问,要非阻塞就只能换纯python的mysql库了
est
2013-08-22 14:17:41 +08:00
@ipconfiger MySQLdb (mysql-python) 阻塞,用纯python实现的好一点。是什么原因没有选择后者呢?
ipconfiger
2013-08-22 14:20:58 +08:00
@est 慢啊。总之gevent不是银弹。Node.js也不是,拿个异步回调的写个orm得有多纠结
gamexg
2013-08-22 14:42:29 +08:00
这个靠谱吗?

ORM对象缓存探讨
http://robbinfan.com/blog/3/orm-cache
phuslu
2013-08-22 14:44:25 +08:00
ipconfiger
2013-08-22 14:45:56 +08:00
@phuslu 有人在生产环境使用过么?
phuslu
2013-08-22 14:46:50 +08:00
phuslu
2013-08-22 14:47:45 +08:00
@ipconfiger 而且至少 esn.me 在生产环境下用过啊。
est
2013-08-22 14:50:53 +08:00
@phuslu 我大概知道 @ipconfiger 想说啥了。如果db是瓶颈,每秒只能处理那么多请求,web逻辑再异步也没有用。无论是同步去连还是异步去连。

猜想 @ipconfiger 用多进程跑tornado然后redis自己做调度就是为了避免一个mysql查询卡死整个tornado进程的情况。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/79819

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX