1

I'm passing user-generated HTML into a database and I'm trying to make sure that no malicious code is passed through. One of the steps I'm taking is to run passed code through pear's HTML_Safe class to remove vulnerable markup. However, one thing I've noticed is that the name attribute of submitted elements gets removed. Sure enough, when you look at the source code, name is one of the few attributes that's blacklisted by default:

http://pear.php.net/package/HTML_Safe/docs/latest/HTML_Safe/HTML_Safe.html#var$attributes

What's the danger in allowing users to pass values for name? How can values for name be used to nefarious ends? Any thoughts? If not, I'm tempted to modify the blacklist.

4

1 回答 1

2

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

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

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

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

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

于 2012-12-01T01:51:33.450 回答