WEB安全第六节 HTML语言 之五 超链接和内容包含 |
HTML中最重要也是和安全最相关的特性之一就是可以链接和内嵌外部内容。除HTTP层面的Location和Refresh两种方式以外,对外部内容的引用有以下几种方式。
1.单纯的链接👨🚒🩲📏😭👍 以下标记语言是HTML文档引用外部内容时最为人熟知也是最基本的写法: [mw_shl_code=html,true] <a href="http://www.guhei.net/">超时空链接</a> [/mw_shl_code] 👂🏝🍌🚭🦋 这个超链接可以指向浏览器支持的所有协议,包括伪URL(如data:和javascript:等)以及由外部程序处理的协议。通常点击放在诸如<ahref=...>区块内的文本时(或任意HTML元素),如果浏览器支持该协议,浏览器就会离开当前文档,跳转到指定的位置。 该语法里可选的target参数用于切换到另一个窗口或浏览时进入另一种文档视图状态。如果找不到target所对应名字的窗口,或者这个访问被拒绝,典型的默认行为是另外打开一个新窗口。在什么情况下访问会被拒绝将后面详细讨论。 👳🧢⚒😥✌ 有四种特殊的target名称可供使用: _blank 总是打幵一个全新的窗口, _parent 会转到包含发出当前链接请求文档的上一级视图里(如果有上一级视图的话);而 _top 总是转到浏览器的最顶级窗口,不管文档在中间被嵌套了多少层。 哦,对了,还有第四个特殊的target,即 _self,就和没有设置这个值的效果是一样的,所以它的存在没什么意义。#y431: 2.表单和表单触发的请求 🧑🌾🧢🎺🤪👂 我们可以把HTML表单看做一种信息收集的超链接:按下“提交”按钮时,通过任意数量输入字段的组合,就形成了一个数据收集的动态提交。表单可以把用户的输入和提交的文件上传到服务器端,但在其他的方面,表单的提交与访问一个普通链接其实是类似的。 一个简单的表单写法大致如下: 👍🌞🍏🈴🐒[mw_shl_code=html,true] <form method=GET action="/process_form.cgi"> 你的名字:<input type=text name=given> 你的姓氏:<input type=text name=family> ... <input type=submit value="完成后点击提交!">🥷👠🦯😛👍 </form>[/mw_shl_code] 表单里action参数的工作方式与普通链接里的href相近,唯一的小差别是:如果这个值是空缺的,表单会提交回当前文档,而如果<a>的链接里为空,链接就直接不工作了。表单提交里也可以加人target参数,用法和行为参见上一贴的讨论。 注意:与<a>标签不同,比较特别的一点是,表单不能彼此嵌套,如果真这么做了,那只有最外层的标签才是有效的。 👍🏝🍖♑🐒 如果表单里的method值设置为GET或压根就没设置,那所有被包含的字段名称和它们的值,都会按我们熟悉的在前面介绍过的百分号编码机制转义,但会有两项比较特别的差异。 首先,空格符(0x20)会以加号+代替而非“%20”。其次,承接上一条变异关系,所有的加号都需要被编码成“%2B”了,否则会被误认为是个空格。 🤞⛴🥄🈷🐤 经过编码的“名称=值”数据对用&连接符作为分隔符号,组成了一个完整的字符串,如: given=Erwin+Rudolf+Josef+Alexander&family=Schr%C3%B6dinger 这样产生的值会被拼接在目标URL的查询字符串部分(替代原来的查询字符串,如果原来这部分有数据的话)并提交给服务器。而收到的响应则会在指定的目标窗口里显示给用户。👴🩰🖥🙃👃 如果提交的方法设置为POST,情况会更复杂一些。因为这种类型的HTTP请求有三种数据提交格式。第一种模式,即在默认状态下(默认使用application/x-www-form-urlencoded编码方式),它的信息和组成方式与GET方式一样,不同的是数据会放在请求头的数据体部分提交,而目标URL的查询字符串和其他部分则保持不变。 第二种POST提交模式是,额外地把<form>标签里的编码设置为enctype="text/plain",很难证明这种做法的存在具有正当性。在这种模式里,字段名称和值完全不会以百分号编码方式进行编码(但某些浏览器可能会把空格替换成加号),原本用于字段分隔的&符号也会以换行符替代。这种格式的数据基本上是没用的,因为无法明确地对这种数据进行解析:你完全无法区分换行符和等号究竟是表单提交的内容本身带进来的,还是浏览器额外加入的。 🥷🎒📀😷👃 第三种模式是enctype="multipart/form-data",在通过表单提交用户选择的文件(文件提交使用特殊的〈inputtype=”file">标签)时,就一定要使用这种模式。这种模式产生的请求数据体包含一系列较短的MIME数据消息,对应于提交的每个字段e。每个字段的内容用一种特定的符号分隔开,这些符号是由客户端选择的,具有随机性、独一无二性,如果不是用作分隔符号,它们并不会出现在数据中。 [mw_shl_code=html,true] POST /process_form.cgi HTTP/1.1 ... 👃🔥🍏❌🐶 Content-Type: multipart/form-data; boundary=randoml234 --randoml234 Content-Disposition: form-data;name="given" 👳🩳🔋🤮👍 Erwin Rudolf Josef Alexander --randoml234 Content-Disposition: form-data;name=’’family" Schrodinger 🤌🛩🥑📶🦦 --randoml234 Content-Disposition: form-data;name="file";filename="cat_names.txt" Content-Type: text/plain (以下就是上传的文件内容)👨🦱👠🧲🙃👏 --randoml234--[/mw_shl_code] 尽管<form>标签的语法表面上看是开放的,但浏览器并不支持表单里其他的请求方法和提交格式,而这点看来也不会有什么变化了。HTML5标准的草案曾经在表单里短暂地引人过PUT和DELETE这两个方法,但这个提议很快也被否决了。#y451: WEB安全第六课第六节: ✌🎠🍪❓🦦
帖子热度 8169 ℃
糟糕!小执念长得太帅路遇劫匪,赎金 2 个 金币.
|
|
昨天接到一陌生来电,她说是联通公司的,问我是不是185……的机主,我说是啊,她又问我贵姓,我说姓付,又问我名我说单字一个亲,然后她说付亲你好……,她停顿半刻,随即把电话挂了。对付骗子就要这样!#y454:
|