Php 为什么“NAME”属性被认为是不安全的?

Php 为什么“NAME”属性被认为是不安全的?,php,attributes,html-parsing,pear,html-sanitizing,Php,Attributes,Html Parsing,Pear,Html Sanitizing,我正在将用户生成的HTML传递到数据库中,并试图确保没有恶意代码被传递。我正在采取的步骤之一是通过pear的类运行传递的代码,以删除易受攻击的标记。但是,我注意到,已提交元素的name属性被删除。果然,当您查看源代码时,name是默认列入黑名单的少数属性之一: 允许用户为name传递值有什么危险?name的值如何用于邪恶的目的?有什么想法吗?如果没有,我很想修改黑名单。在HTML表单元素中,name属性用作标识符。因此,如果您允许name,则可能有人可以使用自己的属性覆盖您的HTMLname属

我正在将用户生成的HTML传递到数据库中,并试图确保没有恶意代码被传递。我正在采取的步骤之一是通过pear的类运行传递的代码,以删除易受攻击的标记。但是,我注意到,已提交元素的
name
属性被删除。果然,当您查看源代码时,
name
是默认列入黑名单的少数属性之一:


允许用户为
name
传递值有什么危险?
name
的值如何用于邪恶的目的?有什么想法吗?如果没有,我很想修改黑名单。

在HTML表单元素中,
name
属性用作标识符。因此,如果您允许
name
,则可能有人可以使用自己的属性覆盖您的HTML
name
属性(您可能已经使用过)。找到的第一个匹配的
名称通常是Javascript或服务器端处理使用的名称

然后,这将允许有人利用您可能使用的引用找到的第一个匹配
name
属性的任何可能的Javascript或服务器端表单处理

不仅表单元素可以使用
名称
,而且它们是最不安全的

另一个覆盖问题是,如果在任何函数中使用Javascripts
getElementsByName
(如下所述),那么最终可能会得到一个不符合预期的函数


编辑:关于
getElementsByName
问题的一些更正和注释(如下所述)。

这是不正确的
id
是唯一的,但是
name
可以在表单和输入中使用任意次数(因此,为什么js函数按名称获取元素-
getElementsByName
总是返回一个数组而不是一个元素:因为可以有多个元素具有相同的
name
。我知道有时候js逻辑会受到新名称的影响,但现在
class
是一种更常见的方法。)在这方面,我不认为
name
比大多数其他属性更危险。但是,基本点是,如果表单中包含的元素具有相同的名称,它可能会被传递回服务器端脚本。在这方面,它确实构成了更大的威胁orry似乎无关紧要(考虑到
name
很少被用作选择器)但我同意这样的解释,即如果它进入表单,则会造成更大的危险。您应该澄清您的答案:
名称
不是唯一标识符:甚至在单个表单中也不是。但是,
名称
定义了
\u POST
数组的键,这些键是唯一的,可能会拾取插入的输入。可能是因为一般来说,使用表单并不是人们真正需要发布的东西。在很多情况下,允许用户通过直接DOM操作构建表单内容可能会很方便。问题是除了“如果表单元素中包含代码,它可能最终会被提交”)…这很容易通过不在表单元素中添加已发布的代码来进行保护(与所有js一样,
表单
标签已经被列入黑名单,因此您必须非常草率地以提交的
输入
结束提交)表明
名称
id
有时在某些浏览器中可能意味着相同的事情,因此可能被认为是危险的。