大家好,我是程序员牛肉。
近日,小红书上开始有大量的用户发现time.sleep(1)不能在评论区正常发布,会显示如下:
time.sleep(1) 是一个python语句,当你在 Python 程序中使用 time.sleep(1) 时,程序会在执行到这个语句时暂停 1 秒钟,然后继续执行后面的代码。
小红书不能输入time.sleep(1)的原理其实很简单,应该就是被WAF拦截了。抓包显示小红书用的是阿里的WAF。
[ Web应用防火墙(Web Application Firewall,简称WAF)是一种专门保护Web应用程序免受各种网络攻击的安全设备。WAF通过执行一系列针对HTTP/HTTPS的安全策略,对网站或App的业务流量进行恶意特征识别和防护,将正常、安全的流量返回给服务器,避免服务器遭受恶意入侵和性能异常问题,保障业务和数据安全 ]
应该是这个参数过于敏感,触发了WAF攻击行为的关键词,被拦截后直接响应405。
那又有一个问题了:我们为什么要拦截这类输入呢?如果不拦截这类输入,会造成什么后果呢?
简单的来讲,就是用来防止XSS攻击的。
[XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的网络安全漏洞,它允许攻击者将恶意脚本注入到其他用户会浏览的页面中。XSS攻击通常发生在当Web应用程序允许用户输入未经适当处理或过滤的数据时。这些数据可以是链接、图片、视频或其他内容。]
我在网上找到了一个可供演示的网站来向大家展示一下XSS攻击是什么样的。本次攻击场景和小红书这次的一样,都是在评论区评论。
https://portswigger.net/web-security/cross-site-scripting/stored/lab-html-context-nothing-encoded 演示网站
在评论区中,我们并不发表正常的评论语句,而是输入一个JS语句:
<script>alert ('HELLO My NAME is niurou')<script
我们在评论区发表如上图所示的评论:
让我们发表这个评论之后尝试查看评论区:
此时我发的那个JS语句竟然被执行了,而且由于这个脚本被存储在了评论区中,任何人访问这个网站都会触发这个脚本。
我只是让他弹了一个弹窗,如果是恶意用户使用这种类似的操作进行更加恶意的行为呢?
透过现象看本质,造成这种现象的更根本原因其实是因为现阶段下的计算机无法区别数据与指令。
当计算机尝试在评论区显示这条评论的时候,到底是把它当作数据看还是当作一条指令执行呢?
在这里计算机显然是把他当作一条指令了,因此才会在网页跳出弹窗。
<script>alert ('HELLO My NAME is niurou')<script>
当你明白计算机没有办法辨别数据和指令的时候,你也就明白了更多攻击方式的原理,比如SQL注入:
假设有一个登录SQL语句:
select * from allusers
where username='niurou'and password='12345'
如果有恶意用户输入的账户名为 niurou ' -- ,那么这条SQL语句就变成了
select * from allusers
where username=' niurou ' -- 'and password='12345'
这下就坏了,密码部分被注释掉了,那么恶意用户无需密码成功登录进了这个用户的账户。
究其原因还是因为计算机无法区别数据和指令,他把我们输入的“--”当作了注释,错误的注释掉了后面的密码部分。
不只是计算机会犯这种错误,人类有的时候也会无法区别指令和数据:
又或者是:
关于最后这个韦一敏,网友还将其总结为了一个效应,取名为韦一敏效应。本质上还是我们人类没有分清楚”你的名字“到底是数据还是指令,才闹出了这种比较好玩的事情。
只能说计算机也有自己的韦一敏效应吧。我在上面展示的XSS攻击只是存储型XSS攻击。除此之外,我们还有反射型XSS攻击和DOM型攻击,在这里就不多作介绍了。不过这些攻击手段都是很久之前的小玩意了,现在想凭借这种简单的攻击手段就攻击一个网站确实是不太可能了。
正常网站面对这种数据一般都会进行转义的,这也就是为什么订阅号评论区可以输入time.sleep(1)的原因。不信的话大家可以试一试。
相信通过我的介绍,你已经了解本次小红书为什么不能输入time.sleep(1),希望我的文章可以帮到你。