|
360浏览器弹出一行灰底白字:“疑似跨站请求伪造访问已被禁止”。疑似已被我盯着屏幕愣了两秒——刚才不过点开一个论坛帖子的跨站下一页,怎么就撞上CSRF拦截了?请求 这玩意儿平时藏在“安全防护”的二级菜单里,大多数用户根本不知道它存在。伪造它的访问原理不复杂:网站A让你登录了,浏览器存着A的禁止cookie,这时你访问恶意网站B,疑似已被B偷偷向A发请求,跨站就能用你的请求身份干坏事。360拦的伪造就是这种“借刀杀人”的请求。 但问题在于,访问它的禁止拦截判断有时过于灵敏。我那次访问的疑似已被论坛,分页参数直接写在URL里,跨站没有加随机token。请求360一看,这请求不带任何验证标识,和CSRF攻击的特征高度吻合——拦!可论坛程序就是这么设计的,老代码没跟上安全规范,用户就被误伤了。 这种误伤不是个例。我同事用某政府网站查社保,点“打印证明”按钮,页面直接跳拦截提示。她打电话问客服,客服说“换个浏览器试试”。换成Chrome,一切正常。她回来跟我吐槽:“360是不是管得太宽了?” 管得宽,恰恰是它的生存策略。国内网站质量参差不齐,很多小站连HTTPS都没上,更别提CSRF Token防护。360用浏览器端强制拦截,等于给这些裸奔的网站套了件外套——哪怕网站自己漏洞百出,至少用户这边多道闸。代价就是误伤率居高不下,尤其对老系统、内部管理系统这类“年久失修”的站点。 有意思的是,拦截页面不提供“继续访问”的选项,只让你返回或刷新。想绕过?手动改URL,把请求里的敏感参数去掉,或者干脆复制链接到无痕窗口——但那样cookie也没了,等于重新登录。实际上最有效的办法是关掉“网站安全防护”里的“跨站请求伪造防护”开关,可这等于拆了安全气囊开车,心里没底。 我后来仔细看了那个论坛的报错日志,发现它分页请求确实带着一个旧版本的session标识,而360的规则库恰好更新了一条针对该框架的CSRF特征。两边都没错,错在时间差——网站没跟上浏览器安全策略的更新节奏。 这种冲突会越来越频繁。浏览器厂商在安全上层层加码,而大量中小网站还在用十年前的老框架。你去问站长,他说“我运行得好好的,凭什么改代码”。你去问360,它说“我宁可错杀一千,不能放过一个”。用户卡在中间,成了安全博弈的试验场。 说句实在话,这种拦截对懂行的人是个提醒——该检查自己常访问的网站有没有CSRF防护了。对不懂的人,它就是一道莫名其妙的路障。我最后怎么解决的?把那个论坛的网址加进了360的信任列表,然后给站长发了封邮件,建议他升级分页组件。他回了个“收到”,至今没改。 大概这就是国内互联网的常态:安全软件跑得比网站快,用户被夹在缝隙里,学会自己打补丁。 |