Javascript 通过JS更改类型属性。这是安全问题吗?

Javascript 通过JS更改类型属性。这是安全问题吗?,javascript,jquery,security,html,Javascript,Jquery,Security,Html,我们是否应该能够更改HTML输入标记的TYPE属性 例如,我们正在这样做: 原始html: <input type="text" /> 通过jQuery,我们将其更改为: <input type="number" /> 这在iOS的Safari中似乎运行良好。我没有想到这会是个问题 但是现在我们在一些Android设备上看到了一些问题,在做一些研究时,我发现有人提到,出于安全原因,一些浏览器根本不允许您更改type属性 问题是:1)这是真的吗?2) 如果是,具

我们是否应该能够更改HTML输入标记的TYPE属性

例如,我们正在这样做:

原始html:

<input type="text" />

通过jQuery,我们将其更改为:

<input type="number" />

这在iOS的Safari中似乎运行良好。我没有想到这会是个问题

但是现在我们在一些Android设备上看到了一些问题,在做一些研究时,我发现有人提到,出于安全原因,一些浏览器根本不允许您更改type属性

问题是:1)这是真的吗?2) 如果是,具体原因是什么?如果他们允许的话,我不知道这会导致什么样的安全问题

更新:


到目前为止,似乎是的,这是真的,但不是因为任何标准实践或规范…只是一些浏览器不喜欢它。也就是IE和Android浏览器的一些版本。

什么是安全原因?都是客户端的。无论如何,你不应该信任任何客户端的东西

客户端可以在浏览器中和路径上更改任何他们想要的内容。这绝对没有安全问题


我怀疑某些浏览器不允许您更改type属性,因为浏览器必须在内存中创建一个全新类型的对象,或者其他类似的奇怪之处。它与安全性无关。

只有在元素未附加到文档时,才能更改输入类型

因此,要更改输入的类型,请将其从文档中删除,然后在以下情况下重新插入:

var elem = document.getElementById('someinput'),
    sibling = elem.nextSibling,
    par = elem.parentNode;
par.removeChild(elem);
elem.type = "number"; // new type here
par.insertBefore(elem,sibling);

这很痛苦,但正如Brad所说,这可能与必须创建一个全新的表单元素有关。

我不是在问用户数据,而是为什么浏览器本身会阻止这一点。我完全理解从不信任客户端数据…这就是为什么我觉得浏览器会决定“type”属性是一些主要问题的原因。听起来我们只能猜测。这很好。至少我知道这不是我正在打破的一个标准规范,这只是在这里工作的老的恼人的浏览器问题。哦,让我换一句话,我完全同意你…我看不出浏览器这样做有任何安全问题的论点。但在谷歌搜索这个问题时,这似乎是一个流行的理论“你不能更改type属性,因为这是一个安全问题”,这正是让我困惑的地方。我刚刚在这里讨论了这个问题:我认为浏览器让你这么做是不好的。安全问题来自于如果有人保存了密码,任何人都可以使用控制台javascript加载该密码并快速取出密码。“这是真的吗?”。。。对Internet Explorer根本不允许您更改
类型
属性。至于原因。。。我不是很确定!我想这是一个理论…那么可能是HTML5之前的遗留问题?现在有这么多有用的类型属性,阻止对type=“password”的访问似乎更有意义,但其他一切都保持原样。我主要是想弄清楚这是一个通用规范,还是一些浏览器限制的任意规范。你应该使用jQuery的
.replaceWith()
对于@Chimoo,密码字段没有任何安全性。谁在乎有人把密码字段改成文本字段。你知道我们可以用100种不同的方法得到这个字段的值,对吗?在最坏的情况下,更改表单的操作以指向中间脚本中的人。这不是安全问题,疯了。另外,这似乎可以绕过浏览器认为它无论如何都要保护的任何安全问题嗯。。。奇怪的我只是为了检查一下,在这个页面(搜索框)上找到了第一个输入,并用
document.querySelector('input').type=“checkbox”
和。。它起作用了?是的,更改type属性在很多浏览器中都很有效。似乎有些安卓浏览器不允许你使用,但这正是我开始在其他地方发现这一点的地方…通常指的是IE。就是这样,我在IE9中。是的,我猜测(理论)这是从很久以前开始的,IE终于修复了它。我不知道为什么一些Android浏览器会引起问题,但我慢慢地发现,一般来说,Android浏览器一开始就是有问题的,所以我想我并不感到惊讶。