除了Web除了系统本身没有漏洞和被攻击者使用外,还需要安全地向用户发送内容数据,用户可以安全地接收内容数据。防止内容在传输过程中被篡改,防止用户提交非法内容,确保系统能够接收到的内容。
1、不安全的HTTP传输
HTTP传输的数据是未加密的,即明文。因此,在传输过程中,可以随时拦截。客户端和服务器之间没有身份确认过程。所有数据都是明文传输的,因此容易受到攻击,因此使用HTTP传输隐私信息非常不安全。
图1是普通HTTP的传输,HTTP传输面临以下风险。
(1)窃听风险:攻击者可以获得所有通信内容。
(2)篡改风险:攻击者可以修改所有通信内容。
(3)冒险:攻击者冒充他人参与通信。
图1 HTTP被拦截
为了防止上述现象的发生,研发人员对传输的信息进行对称加密。如图2所示,即使攻击者截获了传输的信息,也无法破解。
图2 对称加密
使用对称加密,双方拥有相同的密钥,信息可以安全传输,但这种方以下缺点。
(1)客户端和服务器数量不同,双方都需要维护大量密钥,维护成本很高。
(2)密钥容易泄露,因为每个客户端和服务器的安全级别不同。
为了防止对称加密中的密钥泄露,如图3所示,非对称加密客户端使用公钥对请求内容进行加密,服务器使用私钥对内容进行解密,反之亦然。然而,在这个过程中也存在一些缺点。公钥是开放的(即攻击者也有公钥),因此如果恶意攻击者拦截服务端私钥加密的信息,攻击者可以使用公钥解密并获取内容。
图3 不对称加密
为了兼顾性能和安全,人们将对称加密和非对称加密结合起来,充分发挥各自的优势。图4显示混合加密。
图4 混合加密
客户端使用公钥加密对称密钥。服务器收到信息后,可以用私钥解密,提取对称加密算法和对称密钥。
但仍存在以下问题。
(1)无法确定客户端获得的公钥是真的还是攻击者伪造的。
(2)无法确认服务器是真实的而不是攻击者的。
因此,在传输过程中仍有劫持的可能性,如图5所示。
图5 加密传输被劫持
2、HTTPS传输更安全
为确保这些隐私数据能够加密传输,Netscape公司设计了安全套接层(Secure Sockets Layer,SSL)协议用于对HTTP加密传输的数据,诞生了HTTPS。
HTTPS它可以加密信息,防止数据信息在传输过程中被第三方窃取和修改,以确保数据的完整性。因此,许多银行网站或电子邮件等安全服务都采用了HTTPS。随着安全意识的提高,主流网站相继使用HTTPS。
图6展示了HTTPS客户端在接收服务端发送的请求流程SSL证书时,会对证书的真伪进行校验。下面以浏览器为例进行说明。
图6 HTTPS请求过程
(1)浏览器读取证书所有者、有效期等信息,并逐一核对。
(2)浏览器开始搜索操作系统中内置的可信证书发布机构CA,服务器务器的证书CA比较验证证书是否由法律机构颁发。
(3)如果找不到,浏览器会报错,说明服务器发的证书不可信。
(4)如果发现,浏览器将从操作系统中取出发起人CA公钥,然后解密服务器发送的证书中的签名。
(5)浏览器使用相同的散列算法计算服务器发送的证书的散列值,并将该计算的散列值与证书中的签名进行比较。
(6)如果对比结果一致,则证明服务器发送的证书合法,不冒充。
(7)此时浏览器可以读取证书中的公钥进行后续加密。
通过发送SSL证书的形式不仅解决了公钥获取问题,还解决了攻击者冒充问题,因此与HTTP,HTTPS传输更安全。
(1)所有信息都是加密传播的,攻击者不能窃听。
(2)有验证机制,一旦被篡改,通信双方都会立即发现。
(3)配备身份证,防止身份冒充。
相比HTTP,HTTPS它增加了大量的握手、加密和解密过程。虽然这个过程非常复杂,但它可以确保数据传输的安全。在这个互联网扩张的时代,隐藏着各种看不见的危机。为了确保数据的安全,维护网络,建议使用HTTPS。
3、防止盗链
盗窃链是指网站所有者不存储资源,而是通过技术手段窃取其他网站服务提供商的内容资源,直接在自己的网站上显示,以欺骗最终用户的浏览和点击。被盗的内容主要是图片、视频和其他资源下载文件。网站盗窃链将消耗大量被盗链网站的带宽和系统资源,增加服务器负担,损害企业利益,对企业形象产生负面影响。
通常可以检测访问源,以防止服务器资源被盗。Referer过滤,如在Nginx中配置Referer检查,检查Referer是否在指定的域名来源中,如www.ptpress.com.cn、ptpress.com.cn,防止jpg|gif|png|swf|flv|wma|wmv|mp3|zip|rar第三方引用了这些静态资源。如果检测失败,将直接返回“404无法找到资源”。
每个系统都应确保接收和传输到用户端的内容是合法和健康的,因此有必要建立有效的过滤或安全限制机制。“政治”“毒品”“色情”“武器”“暴力”“恐怖”“广告”“业务违规”对于其他内容,必须过滤并禁止传输或接收,以防止被攻击者和罪犯用于广告、言论攻击等。
通常的做法是建立敏感词词库,当用户提交内容后,对内容进行分词处理,将分词后的数据与敏感词库中的数据一一对比。一旦命中,就禁止用户提交。
图7显示了系统在检测敏感词时拒绝提交数据的过程。
图7 检测到敏感词
只有检测内容不包括敏感词,才能保存用户的内容。图8显示了系统未检测到敏感词的过程,用户可以顺利提交数据。
图8 敏感词没有检测到