Php 为什么“NAME”属性被认为是不安全的?
我正在将用户生成的HTML传递到数据库中,并试图确保没有恶意代码被传递。我正在采取的步骤之一是通过pear的类运行传递的代码,以删除易受攻击的标记。但是,我注意到,已提交元素的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属
name
属性被删除。果然,当您查看源代码时,name
是默认列入黑名单的少数属性之一:
允许用户为
name
传递值有什么危险?name
的值如何用于邪恶的目的?有什么想法吗?如果没有,我很想修改黑名单。在HTML表单元素中,name
属性用作标识符。因此,如果您允许name
,则可能有人可以使用自己的属性覆盖您的HTMLname
属性(您可能已经使用过)。找到的第一个匹配的名称通常是Javascript或服务器端处理使用的名称
然后,这将允许有人利用您可能使用的引用找到的第一个匹配name
属性的任何可能的Javascript或服务器端表单处理
不仅表单元素可以使用名称
,而且它们是最不安全的
另一个覆盖问题是,如果在任何函数中使用JavascriptsgetElementsByName
(如下所述),那么最终可能会得到一个不符合预期的函数
编辑:关于getElementsByName
问题的一些更正和注释(如下所述)。这是不正确的id
是唯一的,但是name
可以在表单和输入中使用任意次数(因此,为什么js函数按名称获取元素-getElementsByName
总是返回一个数组而不是一个元素:因为可以有多个元素具有相同的name
。我知道有时候js逻辑会受到新名称的影响,但现在class
是一种更常见的方法。)在这方面,我不认为name
比大多数其他属性更危险。但是,基本点是,如果表单中包含的元素具有相同的名称,它可能会被传递回服务器端脚本。在这方面,它确实构成了更大的威胁orry似乎无关紧要(考虑到name
很少被用作选择器)但我同意这样的解释,即如果它进入表单,则会造成更大的危险。您应该澄清您的答案:名称
不是唯一标识符:甚至在单个表单中也不是。但是,名称
定义了\u POST
数组的键,这些键是唯一的,可能会拾取插入的输入。可能是因为一般来说,使用表单并不是人们真正需要发布的东西。在很多情况下,允许用户通过直接DOM操作构建表单内容可能会很方便。问题是除了“如果表单元素中包含代码,它可能最终会被提交”)…这很容易通过不在表单元素中添加已发布的代码来进行保护(与所有js一样,表单
标签已经被列入黑名单,因此您必须非常草率地以提交的输入
结束提交)表明名称
和id
有时在某些浏览器中可能意味着相同的事情,因此可能被认为是危险的。