HTML 表单用于收集用户输入。

HTML表单是用户和web站点或应用程序之间交互的主要内容之一。它们允许用户将数据发送到web站点。大多数情况下,数据被发送到web服务器,但是web页面也可以自己拦截它并使用它。

HTML表单是由一个或多个小部件组成的。这些小部件可以是文本字段(单行或多行)、选择框、按钮、复选框或单选按钮。

表单元素

元素

该元素正式定义了一个表单,它是一个容器元素,同时它在客户端定义如何发送数据,通过支持一些特定的属性来配置表单的行为方式。它的所有属性都是可选的,但至少要设置action属性和method属性。

...

action 属性定义了发送数据要去的位置,它的值必须是一个有效的URL(绝对URL和相对URL均可)。如果没有提供此属性,则数据将被发送到包含表单的页面的URL。

method 属性定义了发送数据的HTTP方法(如何发送数据),其中最常见的是GET方法和POST方法。

input标签不同类型

用button做按钮和用input来做按钮有什么区别?

发送表单数据

参考MDN web docs:发送表单数据

客户端/服务器体系结构

web基于非常基本的客户端/服务器体系结构,可以总结如下:客户端(通常是web浏览器)向服务器发送请求(大多数情况下是Apache、Nginx、IIS、Tomcat等web服务器),使用HTTP 协议。服务器使用相同的协议来回答请求。

在客户端,HTML表单是一种方便的用户友好的方式,可以配置HTTP请求将数据发送到服务器。

表单提交方式中POST和GET的区别:

GET方法是浏览器使用的方法,请求服务器返回给定的资源,在这种情况下,浏览器发送一个空的主体。因为主体是空的,如果使用该方法发送一个表单,那么发送到服务器的数据将被追加到URL。

用户名

年龄

提交

                -->由于GET方法已经被使用,提交表单后-->

GET会修改网址,数据被附加到URL作为一系列的名称/值对,在URL web地址结束之后,我们包括一个问号(?),后面是名称/值对,每一个都由一个与符号(&)分隔开。

HTTP请求如下:

GET /?user=Lily&age=25 HTTP/1.1Host: baidu.com

如果使用POST方法发送表单,则将数据追加到HTTP请求的主体中。

POST会把提交内容放入http的Headers中(F12 Network可查看All--Name标签页下)

What greeting do you want to say?

Who do you want to say it to?

Send my greetings

主体中包含的数据是这样的:

POST / HTTP/1.1

Host: foo.com

Content-Type: application/x-www-form-urlencoded

Content-Length: 13

say=Hi&to=Mom

Content-Length数据头表示主体的大小,Content-Type数据头表示发送到服务器的资源类型。

使用GET请求用户将在他们的URL栏中看到数据,而使用POST请求用户将不会看到。这一点很重要,有两个原因:

如果您需要发送一个密码(或其他敏感数据),永远不要使用GET方法否则数据会在URL栏中显示,这将非常不安全。

如果您需要发送大量的数据,那么POST方法是首选的,因为一些浏览器限制了URL的大小。此外,许多服务器限制它们接受的URL的长度。

常见的安全问题

每次向服务器发送数据时,都需要考虑安全性。到目前为止,HTML表单是最常见的攻击媒介(可能发生攻击的地方)。这些问题从来都不是来自HTML表单本身,它们来自于服务器如何处理数据。

XSS和CRSF

跨站脚本(XSS)和跨站点请求伪造(CSRF)是常见的攻击类型,它们发生在当您将用户发送的数据显示给用户或另一个用户时。

XSS允许攻击者将客户端脚本注入到其他用户查看的Web页面中。攻击者可以使用跨站点脚本攻击的漏洞来绕过诸如同源策略之类的访问控制。这些攻击的影响可能从一个小麻烦到一个重大的安全风险。

CSRF攻击类似于XSS攻击,因为它们以相同的方式攻击——向Web页面中注入客户端脚本——但它们的目标是不同的。CSRF攻击者试图将特权升级到特权用户(比如站点管理员)的权限,以执行他们不应该执行的操作(例如,将数据发送给一个不受信任的用户)。

XSS攻击利用用户对web站点的信任,而CSRF攻击则利用网站为其用户提供的信任。

为了防止这些攻击,您应该始终检查用户发送给服务器的数据(如果需要显示),尽量不要显示用户提供的HTML内容。相反,您应该处理用户提供的数据,这样您就不会逐字地显示它。当今市场上几乎所有的框架都实现了一个最小的过滤器,它可以从任何用户发送的数据中删除HTML

SQL注入

SQL 注入是一种试图在目标web站点使用的数据库上执行操作的攻击类型。这通常包括发送一个SQL请求,希望服务器能够执行它(通常,当应用服务器试图存储由用户发送的数据时)。这实际上是攻击网站的主要途径之一。

其后果可能是可怕的,从数据丢失到通过使用特权升级控制整个网站基础设施的攻击。这是一个非常严重的威胁,您永远不应该存储用户发送的数据,而不执行一些清理工作(例如,在php/mysql基础设施上使用mysql_real_escape_string()。

HTTP数据头注入和电子邮件注入

当您的应用程序基于表单上用户的数据输入构建HTTP头部或电子邮件时,就会出现这种类型的攻击。这些不会直接损害您的服务器或影响您的用户,但是它们是一个更深入的问题,例如会话劫持或网络钓鱼攻击。

这些攻击大多是无声的,并且可以将您的服务器变成僵尸

设计表单

在开始编写代码之前,花时间考虑一下您的表单。设计一个快速的模型可以帮助我们定义想要询问用户的正确的数据集。从用户体验(UX)的角度来看,要记住:表单越大,失去用户的风险就越大。保持简单,保持专注:只要求必要的数据。在构建站点或应用程序时,设计表单是非常重要的一步。

原文地址:https://www.cnblogs.com/Amy-world/p/9918028.html

HTML表单用于收集,HTML表单相关推荐

  1. html在表中加入输入框,HTML表单和输入文本框

    HTML 表单用于收集用户输入的各类信息. 1)例子 文本域 这个例子演示了如何在一个 HTML 页中创建文本域.用户可以在文本域中输入文本. 密码框 这个例子演示了如何在 HTML 页中创建密码输入 ...

  2. Mysql数据库使用:学生选课系统,其中设计到三张表,分别为学生表,课程表,学生和课程对应的关联表。

    Mysql数据库使用 练习内容:主要针对学生选课系统而设计,其中设计到三张表,分别为学生表,课程表,学生和课程对应的关联表. 学生表主要用于存储学生信息,包括姓名,性别,地址,电话等信息 课程表主要用 ...

  3. java自定义表单_JSP实现用于自动生成表单标签html代码的自定义表单标签

    本文实例讲述了JSP实现用于自动生成表单标签HTML代码的自定义表单标签.分享给大家供大家参考.具体如下: 这个是自己写的一个简单的JSP表单标签,用于自动生成checkBox,select,radi ...

  4. 表单在线生成 html代码,JSP实现用于自动生成表单标签html代码的自定义表单标签...

    本文实例讲述了JSP实现用于自动生成表单标签html代码的自定义表单标签.分享给大家供大家参考.具体如下: 这个是自己写的一个简单的JSP表单标签,用于自动生成checkbox,select,radi ...

  5. 表单验证-通用表单验证大全/通用表单验证函数收集

    表单验证-通用表单验证大全/通用表单验证函数收集_Web设计论坛 文章来源:IT人才网(http://www.ad0.cn) Javascript表单验证函数大全: 复制内容到剪贴板代码: <s ...

  6. 用php实现一个简易的web表单生成器,PHP—Web表单生成器

    1.实例: 2. 需求分析 在项目的实际开发中,经常需要设计各种各样表单.直接编写HTML表单虽然简单,但修改.维护相对麻烦. 因此,可以利用PHP实现一个Web表单生成器,使其可以根据具体的需求定制 ...

  7. 分步表单如何实现 html_HTML表单入门的分步指南

    分步表单如何实现 html by Abhishek Jakhar 通过阿比舍克·贾卡(Abhishek Jakhar) HTML表单入门的分步指南 (A step-by-step guide to g ...

  8. php表单 提交数据,PHP表单提交数据

    1.PHP表单处理 PHP 超全局变量 $_GET 和 $_POST 用于收集表单数据 GET 和 POST 都创建数组(例如,array( key => value, key2 => v ...

  9. 分步表单_表单设计-掌握表单设计方法(表单体验篇)

    全篇阅读大概需要15min,对表单设计不熟悉的同学看完后肯定会有不少的收获~~~ 说到表单其实在生活中可以接触到各种各样的表单,比如:驾照申请表.体检表.银行开户需要填写的表等等,这些都是表单,主要目 ...

最新文章

  1. JavaScript大师必须掌握的12个知识点
  2. python之从文件中按行读取数据
  3. Apollo进阶课程㉝丨Apollo ROS原理—2
  4. 机器学习Tensorflow基于MNIST数据集识别自己的手写数字(读取和测试自己的模型)
  5. 装饰器模式与代理模式的区别_JS设计模式(三):装饰器模式、代理模式
  6. JavaScript学习(八十七)—流程控制语句的总结,超级详细!!!
  7. C语言程序设计实验报告——实验一
  8. 2021年,交通·未来系列线上公益学术活动重新起航~
  9. Zabbix 2.2 安装图解教程
  10. 校企同游快乐工作——湖南工程职院美和易思教师开展素质拓展活动
  11. 使用SQL语句向表中插入多行数据
  12. 特征工程7种常用方法
  13. [转载]Android实现更换皮肤功能
  14. Mybatis-plus 查询指定字段 select
  15. 【元胞自动机】保守策略元胞自动机三车道(不开放辅路,软件园影响)交通流模型matlab源码
  16. spi ioctl无效参数解决
  17. 留学计算机专业排名,2016年美国留学计算机专业大学排名
  18. [RK3288] AP6335WIFI模块移植(板级dts文件代码编写)
  19. 升级到 ExtJS 5的错误解决方案
  20. Asp.Net mvc模式下使用ReportViewer

热门文章

  1. 64位传参利用方法LibcSearcher使用入门ROPgadget利用
  2. 两种重要的图——Snapshot diagram UML diagram
  3. Web 文件管理器elFinder 的漏洞链分析
  4. C++中string构造函数的解析
  5. 注入(二):修改导入表(c++)
  6. MySQL删除数据库(DROP DATABASE语句)
  7. 记录 grafana登录 从 go 迁移到 php
  8. 3、CSS 边框border
  9. 验证输入字符串是否包含特殊字符
  10. 1043 Is It a Binary Search Tree (25 分)【难度: 中 / 知识点: 构造二叉搜索树(BST) 】