我浏览了twitter、instagram、snapchat等著名网站的页面来源。我发现所有这些网站的一个共同点是登录/注册页面的页面来源中没有输入标签。事实上根本没有表单标签。我想知道这是安全措施还是其他什么。有人能回答我这个问题吗?
这是过度依赖客户端编程的副作用,而没有将服务器端渲染作为后备。
这与安全无关。
在web的早期,所有内容都存在于HTML代码中。那些页面上几乎没有什么动态。
随着历史的发展,页面变得越来越动态,使用了更多的JavaScript。一些文档元素是通过JavaScript创建的,以响应一些用户事件(如向表中添加行)。这成为了一种模式,也延伸到了页面的初始构建:一些流行的库完全是围绕着这个想法构建的。在极端情况下,HTML只包含一个script
标记(除了html
和body
元素),而JavaScript则根据其他一些配置(在数据库、配置文件、JSON等中)来完成生成页面的全部工作。它取消了HTML设计,并将这一责任转移到了JavaScript身上。
这不是安全问题。这只是一些框架的工作方式之一。
浏览器的页面源仅显示服务器上呈现的内容。我们称之为服务器端渲染
现在,有了客户端渲染的概念,大部分网页都是在客户端生成的,使用React.js等JavaScript框架。服务器只生成基本的框架HTML。
因此,为了回答您的问题:为什么登录/注册页面的页面源中没有输入标记-这是因为这些输入标记是在客户端使用Javascript生成的。这并不能减轻任何安全风险,因为输入标签仍然可以通过DOM检查器访问
这还不错,只是不是这些网站的工作方式。他们可能使用javascript前端应用程序和POST数据到某种后端API来进行登录。
输入标签来自网络的旧变体,服务器准备了一个页面,将其发送到浏览器,浏览器用户填写表单字段,将数据作为编码表单发送到服务器,服务器准备一个新的html块,并将ti发送到浏览器。你会看到页面刷新了不同的内容,大量的html一直在飞来飞去。浏览器使用了一些技巧,使其看起来更无缝,但仍然有一种潜在的工作方法,即整个页面都被取代
现代网络趋向于单页应用程序;页面加载javascript应用程序,脚本操纵浏览器文档来绘制UI,再也不会出现服务器将整个页面批发到浏览器进行显示的情况。这都是"脚本向服务器发送一些数据,可能是json,获得响应并以编程方式更新本地文档,使浏览器更改其显示的内容;
为此,浏览器在某种程度上已经成为一个操作系统或开发环境,具有编程功能,可以访问网络摄像头和文件等本地资源,它与后端服务器形成了一个前端UI,后端服务器保存和处理数据,使应用程序具有价值(值得购买或使用)。这与安全无关,而是为基于web的应用程序制作一个现代、动态和可用的UI。他们没有理由不能使用输入标记;在浏览器中运行的javascript应用程序可以创建一个输入框,用户可以在其中键入,javascript应用程序从中提取值并将其发送到服务器(而不是以表单形式),然后获得响应。。只是他们不需要那样工作;以各种方式获取用户输入、以各种方式将其发送到服务器并根据响应进行操作,都有更多的自由度。我们不再拘泥于那个古老的";将表格张贴到服务器";拥有动态内容的方式,我们已经很久没有联系了,但相对而言,最近才出现了用于创建这些单页应用程序的真正好的框架和库,因此,我们越来越多地看到网站使用它们来获得好处,它们可能会带来在不使用输入标签的情况下获得用户输入的方式,这些方式不受使用标签所带来的一些限制(可能是样式)。
现代网络主要以终端用户体验为中心,拥有更丰富、更流畅的用户界面,传输的数据更少,响应时间更快等。在现代网络中,前端和后端之间的所有聊天(应该)都是通过HTTPS进行的(在高功率服务器和客户端的时代,加密的CPU成本相对较低),因此它至少与以往一样安全。
TLDR;输入标签很少被使用,因为它们不太经常被需要,并且可能会给现代开发方式带来一些问题和阻碍。他们并非天生缺乏安全感。