HTTP协议实用的技能大全!

1、如果不用HTTPS,HTTP协议如何安全的传输密码信息?

HTTP协议是纯文本协议,没有任何加密措施。通过HTTP协议传输的数据都可以在网络上被完全监听。如果用户登陆时将用户名和密码直接明文通过HTTP协议传输过去了,那么密码可能会被黑客窃取。

一种方法是使用非对称加密。GET登陆页面时,将公钥以Javascript变量的形式暴露给浏览器。然后用公钥对用户的密码加密后,再将密码密文、用户名和公钥一起发送给服务器。服务器会提前存储公钥和私钥的映射信息,通过客户端发过来的公钥就可以查出对应的私钥,然后对密码密文进行解密就可以还原出密码的明文。

为了加强公钥私钥的安全性,服务器应该动态生成公钥私钥对,并且使用后立即销毁。但是动态生成又是非常耗费计算资源的,所以一般服务器会选择Pool方法提供有限数量的公钥私钥对池,然后每隔一段时间刷新一次Pool。

2、文件路径攻击

很多操作系统都会使用..符号表示上层目录。如果黑客在URL的路径里面使用..符号引用上层目录,而服务器没有做好防范的话就有可能导致黑客可以直接访问权限之外的文件。比如使用多级..符号就可以引用到根目录,进一步就可以访问任意文件。

所以很多服务器都禁止在URL路径里出现..符号以避免被攻击。

文件路径攻击也是很多黑客非常喜爱使用的攻击方法之一。如果你的服务器有一定的访问量,打开你的nginx日志,你就会偶尔发现有一些奇怪的URL里面有一堆..符号,这种URL的出现就表示网络上的黑客正在尝试攻击你的服务器。

3、DNS欺骗

HTTP协议严重依赖于DNS域名解析。任意一个域名类网址的访问都需要经过域名解析的过程得到目标服务的IP地址才能成功继续下去。

如果掌管DNS服务的运营商作恶将域名解析到不正确的IP,指向一个钓鱼的网页服务。用户如果没有觉察,就可能会将自己的敏感信息提交给冒牌的服务器。

4、谨慎使用外部的HTTP代理

HTTP代理作为客户端到服务器之间的中间路由节点,它起到传话人和翻译官的角色。

如果这个翻译官不靠谱的话,客户端是会拿到错误的返回数据的。它同DNS欺骗一样,是可以对客户端进行钓鱼攻击的。

如果这个翻译官口风不严的话,它可能会将它听到的敏感信息泄露给别人

5、413 Request Entity Too Large

客户端上传图片太大超过服务器限制时,服务器返回413错误。

6、414 Request-URI Too Long

客户端访问的URI太长,超出了服务器允许限制,服务器返回414错误。

7、202 Accepted

常用于异步请求。客户端发送请求到服务器,服务器立即返回一个202 Accepted表示已经成功接收到客户端的请求。

后面怎么处理由服务器自己决定,一般服务器会给客户端预留一个可以查询处理状态的接口,客户端可以选择轮训该接口来知道请求的处理进度和结果。

8、POST提交数据的方式

(1)application/x-www-form-urlencoded

提交数据表单时经常使用,Body内部存放的是转码后的键值对。

POSTHTTP/1.1 Content-Type: application/x-www-form-urlencoded;charset=utf-8 a=1&b=2&c=3&c=4

(2)application/json

提交结构化表单时使用,Body内部存放的是JSON字符串。ElasticSearch的查询协议使用的是这种方式。

POSTHTTP/1.1 Content-Type: application/json;charset=utf-8 {"a": 1, "b": 2, "c": [3, 4]}

(3)multipart/form-data

上传文件时经常使用。这种格式比较复杂,它是为了支持多文件上传混合表单数据而设计的一种特殊的格式。

<form action="" method="post" enctype="multipart/form-data"> <p><input type="text" name="key1" value="value1"> <p><input type="text" name="key2" value="value2"> <p><input type="file" name="file1"> <p><input type="file" name="file2"> <p><button type="submit">Submit</button> </form>

用户填充了表单设置了待上传的文件,点击Submit,传输数据大致如下

POST /upload HTTP/1.1 Content-Length:xxxxx Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryKOThiwE6HubGib7j Host:example.com ------WebKitFormBoundaryKOThiwE6HubGib7j Content-Disposition: form-data; name="key1" value1 ------WebKitFormBoundaryKOThiwE6HubGib7j Content-Disposition: form-data; name="key2" value2 ------WebKitFormBoundaryKOThiwE6HubGib7j Content-Disposition: form-data; name="file1"; filename="file1name.png" Content-Type: image/png file1 content here ------WebKitFormBoundaryKOThiwE6HubGib7j Content-Disposition: form-data; name="file2"; filename="file2name.jpeg" Content-Type: image/jpeg file2 content here ------WebKitFormBoundaryKOThiwE6HubGib7j--

9、Cookie

浏览器请求的Cookie中往往会携带敏感信息。服务器一般会将当前用户的会话ID存在cookie里,会话的具体内容存在服务器端,会话的内容很敏感。

浏览器请求时会携带Cookie信息,服务器根据Cookie信息中的会话ID找到对应的会话内容。会话内容里可能存储了用户的权限信息,拿到这部分权限信息后就可能随意控制修改用户的数据。

因为HTTP协议的不安全性,请求数据包很容易被窃听,Cookie中的会话信息很容易被盗。解决方案之一就是在会话中记录用户的终端信息和IP地址信息,如果这些信息突然发生改变,需要强制用户重新认证。

不过高级的黑客是可以伪造出和用户真实请求一摸一样的数据包的。最彻底的解决方案还是采用HTTPS协议。

普通的Cookie信息可以通过Javascript脚本获取到。如果黑客通过某种方式在网页中植入不安全的脚本,将用户的Cookie拿到然后发送到远程的第三方服务器中,那么Cookie中的信息就被泄露了。