• 计算机网络 HTTPS


    HTTPS

    HTTPS (全称:Hypertext Transfer Protocol Secure ),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性 。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。

    HTTP 有一下安全性问题:

    • 使用明文进行通信,内容可能会被窃听;
    • 不验证通信方的身份,通信方的身份有可能遭遇伪装;
    • 无法证明报文的完整性,报文有可能遭篡改;

    HTTPS 并不是新协议,而是 HTTP 先和 SSL(Secure Socket Layer)通信,再由 SSL 和 TCP 通信。通过使用 SSL ,HTTP 提供了加密。认证和完整性保护。
    在这里插入图片描述

    加密

    对称秘钥(对称加密)

    (Symmetric-Key Encryption),加密的加密和解密使用同一密钥。

    • 缺点:运算速度快
    • 优点:秘钥容易被获取
      在这里插入图片描述

    公开密钥(非对称加密)

    (Public-Key Encryption)公开密钥加密使用一对密钥用于加密和解密,分别为公开密钥和私有密钥。公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。

    • 更为安全;
    • 运算速度慢;
      在这里插入图片描述

    HTTPs 采用的加密方式

    HTTPs 采用混合的加密机制,使用公开密钥加密用于传输对称密钥,之后使用对称密钥加密进行通信。
    在这里插入图片描述

    认证

    通过使用 证书 来对通信方进行认证。
    在这里插入图片描述
    数字证书认证机构(CA,Certificate Authority)是客户端与服务器双方都可信赖的第三方机构。服务器的运营人员向 CA 提出公开密钥的申请,CA 在判明提出申请者的身份之后,会对已申请的公开密钥做数字签名,然后分配这个已签名的公开密钥,并将该公开密钥放入公开密钥证书后绑定在一起。

    进行 HTTPs 通信时,服务器会把证书发送给客户端,客户端取得其中的公开密钥之后,先进行验证,如果验证通过,就可以开始通信。

    使用 OpenSSL 这套开源程序,每个人都可以构建一套属于自己的认证机构,从而自己给自己颁发服务器证书。浏览器在访问该服务器时,会显示“无法确认连接安全性”或“该网站的安全证书存在问题”等警告消息。

    Web 攻击技术

    主动攻击

    直接攻击服务器,具有代表性的有 SQL 注入OS 命令注入

    被动攻击

    设下圈套,让用户发送有攻击代码的 HTTP 请求,那么用户发送了该 HTTP 请求之后就会泄露 Cookie 等个人信息,具有代表性的有跨站脚本攻击和跨站请求伪造

    跨站脚本攻击

    (Cross-Site Scripting, XSS),可以将代码注入到用户浏览的网页上,这种代码包括 HTML 和 JavaScript。利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和 Cookie 等各种内容。

    危害:

    • 伪造虚假的输入表单骗取个人信息
    • 窃取用户的 Cookie 值
    • 显示伪造的文章或者图片

    防范手段:

    • 过滤特殊字符:许多语言都提供了对 HTML 的过滤,例如 PHP 的 htmlentities() 或是 htmlspecialchars()、Python 的 cgi.escape()、Java 的 xssprotect (Open Source Library)
    • 指定 HTTP 的 Content-Type:通过这种方式,可以避免内容被当成 HTML 解析,比如 PHP 语言可以使用以下代码:
    <?php
       header('Content-Type: text/javascript; charset=utf-8');
    ?>
    
    • 1
    • 2
    • 3

    SQL 注入攻击

    概念:

    服务器上的数据库运行非法的 SQL 语句。

    攻击原理:

    例如一个网站登录验证的 SQL 查询代码为:

    strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"
    
    • 1

    如果填入以下内容:

    userName = "1' OR '1'='1";
    passWord = "1' OR '1'='1";
    
    • 1
    • 2

    那么 SQL 查询字符串为:

    strSQL = "SELECT * FROM users WHERE (name = '1' OR '1'='1') and (pw = '1' OR '1'='1');"
    
    • 1

    此时无需验证通过就能执行以下查询:

    strSQL = "SELECT * FROM users;"
    
    • 1
    危害
    • 数据表中的数据外泄,例如个人机密数据,账户数据,密码等。
    • 数据结构被黑客探知,得以做进一步攻击(例如 SELECT * FROM sys.tables)。
    • 数据库服务器被攻击,系统管理员账户被窜改(例如 ALTER LOGIN sa WITH PASSWORD=’xxxxxx’)。
    • 获取系统较高权限后,有可能得以在网页加入恶意链接、恶意代码以及 XSS 等。
    • 经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统(例如 xp_cmdshell “net stop iisadmin” 可停止服务器的 IIS 服务)。
    • 破坏硬盘数据,瘫痪全系统(例如 xp_cmdshell “FORMAT C:”)。
    JAVA 防范手段

    mybatis是一款优秀的持久层框架,在防止sql注入方面,mybatis启用了预编译功能,在所有的SQL执行前,都会先将SQL发送给数据库进行编译,执行时,直接替换占位符"?"即可;

    mybatis在处理传参的时候,有两种处理方式,一种是#,另一种是$;
    #{XXX},将传入参数都当成一个字符串,会自动加双引号,已经经过预编译,安全性高,能很大程度上防止sql注入;
    ${XXX},该方式则会直接将参数嵌入sql语句,未经过预编译,安全性低,无法防止sql注入;

  • 相关阅读:
    springboot+vue云 农产品中心门户系统
    【Revit二次开发】事务和事务处理(Transaction and FailureHandlingOptions)
    Carbon教程之 基本语法入门大全 (教程)
    LeetCode【84】柱状图中的最大矩形
    基于人体呼出气体的电子鼻系统的设计与实现
    Windows 11 使用 MySQL 官方压缩包手动安装
    Java手写最短路径算法和案例拓展
    elenium定位element-plus框架渲染之后的页面
    四轴异常炸机分析讨论集锦
    语义分割基础知识
  • 原文地址:https://blog.csdn.net/qq_44697754/article/details/128150995