使用javascript和相关问题更改标题


Changing title with javascript and related issues

因此,用javascript更改网站标题并不困难:

document.title = 'title';

然而,我从用户设置变量设置标题:

document.title = userVar; // where userVar is a variable set by a user

这就是它变得令人讨厌的地方。由于变量是由用户设置的,所以它几乎可以包含任何内容。像!@#$%^&*()_+=-或甚至'"unicode characters这样的字符或甚至脚本<script>alert('');</script>。基本上,用户可以输入许多组合作为变量来破坏我们的页面。我们如何实现这样的东西:

document.title = clean(userVar);

奖励PHP问题:在从php变量设置页面标题时,我们也可能遇到类似的问题。我们如何清理变量,以便将其用作网站标题

我认为你应该是安全的。在title标记中添加的任何标记或代码在默认情况下都不会执行。

标题可能包含字符实体(用于重音字符、特殊字符等),但可能不包含其他标记(包括注释)。

来源:w3.org

从我在各种浏览器中看到/测试的情况来看,title标记中的所有字符都被视为纯文本。

从PHP中,您可以简单地使用strip_tag,它至少会删除脚本标记:

http://de1.php.net/manual/en/function.strip-tags.php

您可以使用RegExp对userVar 进行消毒

Javascript

MDN字符串重置

function clean(userVar){
   return userVar.replace(/'W+/ig, "");
}

PHP

PHP预放置

function clean($userVar){
   return preg_replace("/'W+/", "", $userVar)
}