首先的话作为一个标准安全的后台认证和鉴权是一定要做好的,除此之外一下业务场景和常见问题也要进行考虑和预防。
网页的业务逻辑需要严密。
比如收藏和点赞,前端和后端都要对点赞和收藏状态进行控制。简单说就是已经点赞和收藏的用户不能再进行点赞和收藏。
解决方案:通过用户id或者IP等限制用户的访问次数/访问频率
【1】场景一:刷访问量和搜索量
对用户刷量行为进行控制(最终会影响的推荐,排行榜之类功能的准确性),可以根据用户 id 或 IP 等维度来保证单用户的浏览量不重复统计来避免刷量。
【2】场景二:爬虫
可以通过校验码、限制用户浏览条数等方式一定程度上预防爬虫
【3】场景三:用户疯狂调用很消耗资源的接口
如收费的API接口(手机验证码)等烧钱的接口!还有上传文件的接口等等很消耗CPU或者带宽的接口
【4】场景四:用户暴力破解密码登录
可以通过验证码、限流、限制单账号密码错误次数等方式防止密码暴力破解
上传文件是一件很消费硬盘和带宽的事情,而且用户的文件也不一定是安全的。
所以我们要防止用户上传超大文件或者频繁上传文件或者上传危险的脚本文件
解决方法:(1)限制上传文件的大小和格式
(2)如果用户频繁访问超大图片,给存储文件添加防盗链、缓存等防护 / 减压措施,防止资源浪费
XSS,即跨站脚本攻击。
简单说就是让客户端的游览器执行黑客的脚本。这些脚本有的隐藏在URL的参数里,有的隐藏在URL#后面里,有的隐藏在页面中,如评论区。但不管哪种类型本质上都是相同的,都是XSS。
反射型XSS一般是利用网页的检索功能,你搜索的关键词会体现在URL里,服务器会根据URL反射展示在你的页面里,换句话说你的URL的其中一部分被展示在页面里。【因为你搜索之后搜索框中的信息会在页面里】
如果服务器没有对检索的URL进行过滤,刚好URL里含有恶意的代码,恶意的代码就会被植入到你的页面里面。
测试:我们在输入框里输入字符,并且点击设置按钮就会进行检索
网页也会把结果返回到页面上,URL里有什么请求字符,就把请求字符反射到页面上来
看看网页的源码,我们刚刚输入的字符被包裹在这个B标签里面,如果我们想把输入的字符变大
比方说使用H1标签,那我们就直接在URL上为搜索字符包裹H1标签,结果会呈现大字体的字符。
当然黑客发给你的并不是网页标签,而是js脚本之类的,网页解析到在URL中的js脚本,URL中的js脚本映射到页面中,游览器就会自动执行js脚本,然后黑客就可以搞一些事情了。
比如黑客不发表正常的评论,而是把恶意代码脚本作为评论发送给网站服务器,如果服务器不进行过滤,就会把评论永久保存起来到数据库里面。
每个浏览这个网站的用户都会被迫看到有恶意代码的评论,看到恶意代码的同时,浏览器就会自动执行恶意代码,然后进行一些恶意操作,比如把你的信息泄露给了黑客。
用户并不是因为点击乱七八糟的URL中招,而是在你访问网站评论区的时候就自动中招了。
又比如B站允许用户发送弹幕,如果服务器不过滤用户发送的恶意信息,这些信息就会保存在B站服务器里,只要有用户访问当前端视频页面就中招,直到服务器那边把恶意代码删除为止。
简单说就是我们静态资源的链接一般的话都会在后面一般开发者使用这有个#号,这个井号是为了方便用户跳转,对服务器的请求进行客户端渲染,但是井号后面这一片段,默认是不发送给服务器的,也就是说浏览器向服务器请求前面的一部分URL,并且正常进行渲染。如果UNL里需要跳转到井号的部分,是在页面上进行操作的。
所以黑客们就在#号后面书写恶意脚本,然后将这个URL发给用户,用户通过#号前的URL请求网站,然后返回到自己游览器的时候,#号后面的脚本就会被游览器执行,然后黑客就会进行一系列的操作。
当然还有其他的XSS类型。
客户端的一切输入都是不安全的!!!因此需要预防。
【1】校验方面,例如我们需要校验邮件和手机号输入是否合法,前后端都需要对用户输入的邮件和手机号用正则表达式进行检查
【2】XSS方面,对用户搜索框输入和评论区之类的输入都要进行过滤,防止恶意脚本
【3】限制输入长度之类的,前后端都需要检查用户输入的内容是否太长,这样即防止用户无休无止的输入,又防止输入过长增加黑客操作可能性。
【4】另外的话还要加上一条,就是内容检查,对用户评论和发布的内容进行审核,防止灌水和黄色暴力等内容。
(1)尽量不要暴露网关后面的源服务器IP,为什么呢?
因为一般访问接口的话访问的是网关,网关的特点是带宽大,但是占用磁盘IO这类的资源小,并且有负载均衡,IP网段等黑名单进行请求过滤。
如果直接攻击源服务器,请求没有过滤,没有负载均衡,那个源服务器就容易崩。
现在还有些直接消耗tcp资源,因为tcp的资源是有限的。
(2)给系统添加防火墙,比如我们有mysql和redis等服务,一般都是暴露给本机或者内网服务器使用,如果暴露给外网的话可能很快就崩了。
我上次的话开放了redis的端口,又没有设密码,一会儿就挂了。