网站开发常见问题
相关信息
网站开发遇到常见的问题
XXS跨站脚本攻击
XXS是什么?
xss攻击(XSS(跨站脚本攻击) 是一种常见的安全威胁,如果攻击者能够在你的网页中注入恶意脚本,那么这个脚本可以轻松访问 localStorage 中的内容,包括存储的 JWT。)
跨站脚本攻击是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。它允许恶意用户将代码注入网页,其他用户在浏览网页时会受到影响,恶意用户利用xss 代码攻击成功后,可能得到很高的权限、私密网页内容、会话和cookie等各种内容
XXS危害
盗取各类用户帐号,如机器登录帐号、用户网银帐号、各类管理员帐号
控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
盗窃企业重要的具有商业价值的资料
非法转账
强制发送电子邮件
网站挂马
控制受害者机器向其它网站发起攻击
XXS反制
如果Cookie中设置了HttpOnly属性,那么通过JS脚本将无法读取到Cookie信息,这样能有效防止XSS攻击,窃取Cookie内容。 但是还是存在xss跨站语句,阻止的仅仅是获取cookie
解决方法使用 httpOnly 和 secure 标志的 Cookie 存储 JWT
过滤输入:对输入进行过滤,不允许可能导致XSS攻击的字符输入
过滤输出:根据输出点的位置对输出到前端的内容进行适当转义
CSRF跨站请求伪造
CSRF是什么?
CSRF (Cross-site request forgery,跨站请求伪造)也被称为One Click Attack或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。
是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己以前认证过的站点并运行一些操作(如发邮件,发消息,甚至财产操作(如转账和购买商品))。因为浏览器之前认证过,所以被访问的站点会觉得这是真正的用户操作而去运行。
XSS利用站点内的信任用户,而CSRF则通过伪装成受信任用户请求受信任的网站
CSRF原理及过程
本质原因是重要操作的所有参数都是可以被攻击者猜测到
要被CSRF攻击,必须同时满足两个条件:
- 登录受信任网站A,并在本地生成Cookie。
- 在不登出A的情况下,访问危险网站B。
CSRF挖掘漏洞
1、最简单的方法就是抓取一个正常请求的数据包,如果没有Referer字段和token,那么极有可能存在CSRF漏洞。
2、如果有Referer字段,但是去掉Referer字段后再重新提交,如果该提交还有效,那么基本上可以确定存在CSRF漏洞。
怎么防御CSRF
1、验证码被认为是对抗CSRF攻击最简洁而有效的防御方法。
2、在请求地址中添加 token 并验证
3、在 HTTP 头中自定义属性并验证
4、验证 HTTP Referer 字段
跨域
出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port)
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域
非同源限制:1、无法读取非同源网页的 Cookie、LocalStorage 和 IndexedDB 2、无法接触非同源网页的 DOM 3、无法向非同源地址发送 AJAX 请求
解决方法:Nginx 实现原理类似于 Node 中间件代理,需要你搭建一个中转 nginx 服务器,用于转发请求。使用 nginx 反向代理实现跨域,是最简单的跨域方式。只需要修改 nginx 的配置即可解决跨域问题,支持所有浏览器,支持 session,不需要修改任何代码,并且不会影响服务器性能。
OOM
OOM是Out Of Memory的缩写。即内存溢出。OOM通常是由于程序消耗的内存超过了系统实际可用的内存资源,或者是内存泄漏导致的。OOM错误会导致程序异常终止,通常会在日志或控制台中输出相关错误信息,包括堆栈跟踪等,以便开发人员进行排查和修复。解决OOM问题通常需要对程序进行内存使用情况的分析,优化代码逻辑,释放不必要的内存资源,增加系统内存配置等措施。
内存泄漏:程序中存在内存泄漏问题,即申请的内存未被正确释放。长时间运行的程序中,如果频繁创建对象而不释放,就会导致内存不断累积,最终耗尽可用内存,触发OOM错误。
内存申请过大:程序在某一时刻申请了过多的内存,超出了系统实际可用内存资源。这可能是由于算法设计不当、数据结构选择不合适等原因导致的,也可能是程序本身存在缺陷。
内存资源被占用过多:系统中其他进程或服务占用了大量内存资源,导致当前程序无法获得足够的内存空间。
内存泄漏导致的OOM:某些框架、库或第三方组件本身存在内存泄漏问题,导致程序使用这些组件时频繁发生内存泄漏,最终导致OOM错误。
401、403、500
- 401 Unauthorized(未经授权)表示请求需要进行身份验证,但客户端未提供有效的身份验证凭据。
- 403 Forbidden(禁止访问)示服务器理解请求,但拒绝执行该请求。
- 500 Internal Server Error(服务器内部错误)表表示服务器在处理请求时遇到了意外的错误,无法完成请求。
这三种常见的状态码用于返回error的时候,401更偏向于当前用户的信息是否都齐全,403更偏向根据当前用户齐全的信息去判断是否有权限访问,500是系统db查询出错、redis出错的system的错误。
生活举例:可以用人的身份证做类比,身份证上的信息不齐全就是401错误(缺少名字,地址啥的、国籍),403就像你是国外的国际地址是不允许进入中国的。500就像你是偷渡的没有身份信息。
BCrypt是什么加密算法
BCrypt除了加盐来抵御rainbow table 攻击之外,bcrypt的一个非常重要的特征就是自适应性,可以保证加密的速度在一个特定的范围内,即使计算机的运算能力非常高,可以通过增加迭代次数的方式,使得加密速度变慢,从而可以抵御暴力搜索攻击。
如何防御彩虹表的破解?虽然彩虹表有着如此惊人的破解效率,但网站的安全人员仍然有办法防御彩虹表。最有效的方法就是“加盐”,即在密码的特定位置插入特定的字符串,这个特定字符串就是“盐(Salt)”,加盐后的密码经过哈希加密得到的哈希串与加盐前的哈希串完全不同,黑客用彩虹表得到的密码根本就不是真正的密码。即使黑客知道了“盐”的内容、加盐的位置,还需要对H函数和R函数进行修改,彩虹表也需要重新生成,因此加盐能大大增加利用彩虹表攻击的难度。