防止 HTML 表单中的 JS/CSS
Posted
技术标签:
【中文标题】防止 HTML 表单中的 JS/CSS【英文标题】:Prevent JS/CSS in HTML form 【发布时间】:2013-09-16 10:03:37 【问题描述】:我会制作一个 html 表单,但我的朋友在 <input type="text">
中插入了一个 CSS 标记,并将我的背景颜色设置为粉红色。哈哈
我怎样才能避免这种情况?我需要更改我的 SQL INSERT 字符串吗? JS也有办法做到这一点吗?谢谢
HTML
<div id="cadastro">
<fieldset style="border:none;">
<legend style="text-align:center;">
<h1>SEJA UM MEMBRO IFBB</h1>
<p class="sub-legenda">Filie-se e ajude o ifbb ser ainda mais forte.</p>
</legend>
<form enctype="multipart/form-data" action="#">
<input type="text" class="nomeCadastro" placeholder="Nome" required>
<br>
<input type="email" class="emailCadastro" placeholder="E-mail" required>
</fieldset></div>
他在<input type="text" class="nomeCadastro">
中插入的CSS标记:
<style>background-color:pink;</style>
我正在使用 php 5。
【问题讨论】:
你能更具体一点并显示代码吗?strip_tags()
并没有真正解决问题。这只是(坏的)解决方法。
有两种方法。如果您需要让您的用户使用您的表单发送html
,那么您希望过滤输入以仅允许您希望允许的那些标签。如果您想禁止用户发布任何html
,您可以在将其输出回页面时转义他们发送的所有内容。在这两种情况下,您都可以依赖服务器端技术。如果您使用ajax
加载数据,您可以查看第三个答案here。前 2 个不安全(类型 0 xss)。
【参考方案1】:
您只需将<
和>
等特殊字符替换为实体,即可阻止用户提供的数据表现得像您的标记一样。如果用户输入的数据进入数据库,那么您获取并显示它并在该部分中看到问题。如果您的后端是 PHP,那么所有数据都应该在显示之前通过 htmlspecialchars()
传递,这将解决您的问题。参见文档:http://php.net/manual/de/function.htmlspecialchars.php
【讨论】:
事实上你应该尽快将数据传递给htmlspecialchars()
,所以在保存到数据库或再次显示表单之前(例如表单填写错误)!
错了。你不应该保存它改变。保存数据但查看(显示)没有问题,因此您应该在正确的上下文中工作,这意味着在您的视图中,而不是模型中。
好吧,我有一个原始的和清理过的列,用于直接查看而不会忘记清理/清理......还有一个,如果我需要其他类型的原始(未更改)数据(主要是非网络)输出。在更简单的上下文中,我更喜欢只保存和使用“清理”版本。
我的意思是您不应该在保存时更改用户输入的数据,因为这样您会不可逆转地丢失原始数据并且保存此类数据不是问题(假设您听说过 sqlinjection :)。你说你做的正是我说的。您获得了额外的预处理数据,但您仍然拥有原始数据。所以没关系。
我对这个问题的看法是——对于回答此类问题的人——最好的方法是保存安全数据;)以上是关于防止 HTML 表单中的 JS/CSS的主要内容,如果未能解决你的问题,请参考以下文章
HTML 表单 - 使用添加 Enter (CR) 后缀的条码扫描器防止表单提交输入