因此,用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)
}