一次网站“高危”漏洞修复经历纪实

这个“高危”是打了引号的,应该不算标题党吧。

事情是这样子的,我自定义了网站的404页面,就加了这么一句,echo $_SERVER['REDIRECT_URL']; 把当前页面路径打印出来,这样我就不用把目光移到浏览器的url地址栏上去看了。

后来,应该网站还是有那么一点流量吧,我收到了police部门的通知:网站存在高危跨站脚本攻击漏洞,“风险情况”,“处理建议”这些看得我一脸懵逼。

去了police部门,弄明白了原来漏洞是这样的。打开类似这样的url : https://xxxxx.com/《script》alert();《/script》里js代码时会被执行。 这个就是我自定义了404页面加了上面那一句弄出来的,确确实实是个漏洞,一时疏忽导致,解决办法是把上面那句删了就好。

最后给我普及了下网络安全的重要性,大意有:2零大就要召开了,如果网站被人入侵,植入反动标语那个就不好了; 网站已在工信部配案,但police部没有,还要在police部再备案一次;回去写了百多字的具体整改措施。

不知道这算不算是被请喝茶,但发这个贴子真的没有其它意思的,不要多想,只是勉励一下自己以及提醒一下本站的坛友们要引以为戒,写代码的时候要小心一些,不要一时图方便留下高危漏洞就不好了。

5 个赞

你这网站还用 CGI 也太不现代了 :thinking: 随便找个 template engine 都能给你转义 HTML tag 的

没有,是用apache+php,这个不能算CGI吧。

我其实没太弄明白这个漏洞的影响在那,这就是在一个404页面里注入了js代码执行,不能往服务器端注入任意数据,在说了用户要在某网页注入js代码执行,这个是没办法阻止的啊,就说本站,有那么多人用猴油脚本,我理解这个也是在任意网页中注入js来实现想要的功能。

可以用来植入反动标语,通过在拼装 URL 的参数可以拼出来 HTML(因为你的服务器直接把这东西用来显示了), 然后用 URL 缩短之类的服务生成短链接然后分享,这样看起来就像是你的服务器提供了这些东西。

传统的 XSS 攻击原理:

monkey 脚本和 F12 console 改的东西没法通过分享链接给别人看, 就像站内有人用了自定义 CSS/JS,你把本站的网址分享给别人,那别人看到的还是原本的没有自定义的样子

4 个赞

我用的香港的服务器,没有这个烦恼,哈哈。

我也想改成亚马逊云而不是阿里云之类的了,阿里云/腾讯云/华为云这些服务器的域名都要备案什么的

我用的就是腾讯云。在香港的服务域名不用备案。

这个事情的后续: 后面又收了两个大礼包, 《php错误信息泄露》,《(GET)应用程序文件包含漏洞》, 修补起来也无难度, 比较紧张的是每个漏洞都下了三份正式文件,《xxx限期整改通知书》,《关于xxx的预警通报》,《xxx处罚决定书(训诫)》.

文件是线下领取, 还有《公安提示函》,《全国互联网安全管理服务平台备案通知》等.

已经备了两次案了,工信部,公网安部,现在又有了 全国互联网安全管理服务平台,这个平台填写的我看和另外二部有区别的地方,应该是有个 境外 选项, 针对境外注册的域名与境外服务器。

希望这次还能过关吧, 写完整改报告, 感觉比较怪异的一点是, 这个网站已经很久不更新了, 也没有什么功能、业务, 还需要续费让他存在的原因是一个通过了备案的网站的对公司是有用的(也许可能), 为了备案号不被取消,就是网站存在的作用,而网站本身是做什么的,能提供什么信息、服务、有什么价值,这些反倒不重要了,也无人在意

2 个赞

某种意义上来说,国内的个人网站越来越难做了。如果是自己的技术博客的话,还是早早放 Github Pages 之类的地方,或者去长文字平台吧

1 个赞

是纯正的单个公司网站, 个人技术博客的话, 以前也有一个, 后来在里面又加入了公司网站相关的内容(且不止一个公司), 因为备案与网站内容不相符, 备案号取消. 现在这是最后一个有备案号的网站了,活到现在不容易.

技术博客感觉也没有什么想写的东西,目前写出来的基本都发本站了

1 个赞

感觉这个高危可以不用加引号了, 很典型的 XSS. 会在用户的电脑上执行不来自于你的服务器的代码, 比如嵌入一些恶意链接, 恶意表单等.

你见过什么url是长这样的 , https//xxxxx.com/《script》alert();《/script》,不过这个引号确实可以不用加, 另外两个漏洞的级别也一样是的高危,我截个图, 提醒下大家网站上线要彻底关闭调试模式,否则后果可能会很严重

1717568188681

1 个赞

php自己也有escape html的函数,只是需要手动调用一下。正经用php应该都会配template engine吧。哦查了一下,最modern的方式根本不用server side render的,后端(php或者别的)只给api,前端vue/react来干(到这里才想起来我工作搞的也是这种嘛)

1 个赞

就像 cireu 说的, 可以把这个 URL 变成短链发给用户; 或者做个中间网站, 返回 301 跳转到这个页面. 这些情况下用户就不容易看出来这是个不正常的 URL 了.

以前用过一个php程序有一个经典操作, 把sql语句直接放进url, 这个操作传染给了我, 我把sql语句简单处理一下不能直接看出是sql,也放进url里面传参.

因为有这个操作在前, url中出现html tag就感觉不算什么了. 现在看要是被发现url里有sql语句,应该是要被批斗吧

当然应该提醒大家sql放进url里面这件事千万不要做, 当时会那么做是因为公司有个人sql写得很好, 而我写得比较差, 所以sql与数据库设计都归他, 但是他不会php, 会的是java, 而java的开发进度慢了那么亿点点, 时间上等不了了, 为按时完成任务(结束加班), 弄出这么一个接口.

任何问题用事后的眼光来看都能找出其它更好的的解决办法, 如果无法找出来, 那就是有其它更严重的问题.