我有一个用户上传内容的网站,他们可以命名他们上传的内容。一些用户已经包含“&”在他们的名字,我得到一个HTML验证错误。有没有办法让“&”留下来还要验证页面?这将非常有帮助。如果没有,我可以采取哪些其他措施来允许我的页面进行验证?谢谢!
答案 0 :(得分:4)
不,没有办法让页面使用无效内容进行验证。
而且,你不应该在没有正确编码的情况下显示内容!
很抱歉大喊大叫,但您的网站对于跨站点脚本攻击非常开放。任何人都可以将有害内容放在名称中,并且它将在其他人的浏览器中运行。
如何执行此操作取决于您使用的平台。例如,在ASP.NET webforms中,您可以使用Server.HtmlEncode
方法对字符串进行HTML编码。在ASP.NET MVC中,您可以使用相同的,或仅使用自动执行此操作的<%: %>
服务器标记。
答案 1 :(得分:2)
在php中,您需要使用htmlentities方法:
<?= htmlentities($username, ENT_QUOTES) ?>
如果用户输入me&myself
me&myself
(在html页面上显示值的正确方法)
始终始终清理用户输入。永远不要相信客户的浏览器发送给您的任何数据。如果有人在表单字段中输入了某些内容,请不要将其直接粘贴到数据库查询中(使用类似my_real_escape_string($user_input)
的内容进行清理)。如果文本最初是由客户提交的,请不要直接将文本打印到浏览器,始终将其转义(使用htmlentities
)。
这样做的原因是恶意用户可以通过提交触发某些javascript的数据来执行您网站上的跨站点脚本攻击,并从其他客户中删除或窃取数据。如果我将我的名字设置为<script type='javascript' src='http://mysite.com/bad-js.js' />
,则任何加载该页面的人都会在浏览器上执行该未知且可能有恶意的javascript,并可访问其Cookie及其会话。