通过post方式进行提交数据的原理是啥
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过post方式进行提交数据的原理是啥相关的知识,希望对你有一定的参考价值。
我知道get是把数据放在url后面
post是如何把表单的数据提交到服务器呢?什么方式封装的数据?
我们知道,HTTP 协议是以 ASCII 码传输,建立在 TCP/IP 协议之上的应用层规范。规范把 HTTP 请求分为三个部分:状态行、请求头、消息主体。类似于下面这样:
<method> <request-url> <version>
<headers>
<entity-body></entity-body></headers></version></request-url></method>
协议规定 POST 提交的数据必须放在消息主体(entity-body)中,但协议并没有规定数据必须使用什么编码方式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的 HTTP 请求满足上面的格式就可以。
但是,数据发送出去,还要服务端解析成功才有意义。一般服务端语言如 php、python 等,以及它们的 ramework,都内置了自动解析常见数据格式的功能。服务端通常是根据请求头(headers)中的 Content-Type
字段来获知请求中的消息主体是用何种方式编码,再对主体进行解析。所以说到 POST 提交数据方案,包含了 Content-Type
和消息主体编码方式两部分。下面就正式开始介绍它们。 参考技术A POST封装了URL-encoded过的数据,在服务器端CGI编程时,通过STDIN的标准输入读取数据的。追问
这是网管的知识么?
追答不是。做网管一般不需要知道这些,这个是底层开发人员要知道的东西
追问用C++编程?
追答perl, php, ruby,php,c,c++都可以的,都可以进行CGI编程的。
本回答被提问者采纳cookie注入原理及注入检测
通常我们的开发人员在开发过程中会特别注意到防止恶意用户进行恶意的注入操作,因此会对传入的参数进行适当的过滤,但是很多时候,由于个人对安全技术了解的不同,有些开发人员只会对get,post这种方式提交的数据进行参数过滤。
但我们知道,很多时候,提交数据并非仅仅只有get\post这两种方式,还有一种经常被用到的方式:request("xxx"),即request方法
通过这种方法一样可以从用户提交的参数中获取参数值,这就造成了cookie注入的最基本条件:使用了request方法,但是注入保护程序中只对get\post方法提交的数据进行了过滤。
【检测方法】:(本方法适用于asp程序,但对于jsp\php等语言来说,原理同样适用,稍稍贴合相应语言特性进行修改即可)
1、首先找到传参地址:
asp?id=xxx(例如:http://www.example.com/news.asp?id=1)
2、去掉参数,访问该url
http://www.example.com/news.asp?
如果页面访问不正常,则说明该参数id是访问页面所必需的的参数,可以尝试继续注入。
3、记录并清空当前浏览器地址栏中的地址,在其中输入
javascript:alert(document.cookie="id="+escape("xxx")); //这里的xxx就是上一步中id=xxx中的参数值
4、再浏览器地址栏中输入原来的url地址(注意,这里输入的是不带参数值的url,如下):
http://www.example.com/news.asp?
按下回车,访问该url,如果发现页面正常显示了,到此可以证明,我们正在接受的页面存在request方法获取参数,可能存在cookie注入的风险
【利用方法】:手工检测到可能存在cookie注入时,我们就可以通过常规注入方法来进行注入了
1、清空地址栏,输入我们的写cookie代码:
javascript:alert(document.cookie="id="+escape("xxx and 1=1"));
2、使用无参数的url地址访问
http://www.example.com/news.asp?
如果页面正常,我们就可以进行下一步检测。如果这是页面不正常,说明站点管理员已经部署了响应的防御策略,就需要找其他方法注入
3、清空地址,同样的方法写入新的cookie
javascript:alert(document.cookie="id="+escape("xxx and 1=2"));
如果上一次页面正常,这次页面不正常,那么说明存在cookie注入漏洞,可以通过常规方法注入即可,只是cookie注入相对比较麻烦,需要每一次都在浏览器中执行写cookie代码
javascript:alert(document.cookie="id="+escape("xxx 注入语句"));
然后访问不带参数的url地址
http://www.example.com/news.asp?
根据页面提示进行注入即可
以上是关于通过post方式进行提交数据的原理是啥的主要内容,如果未能解决你的问题,请参考以下文章
通过html表单方式提交数据(可以指定get和post)和ajax方式请求的原理是一样的吗?