防止 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>

他在&lt;input type="text" class="nomeCadastro"&gt;中插入的CSS标记:

<style>background-color:pink;</style>

我正在使用 php 5。

【问题讨论】:

你能更具体一点并显示代码吗? strip_tags() 并没有真正解决问题。这只是(坏的)解决方法。 有两种方法。如果您需要让您的用户使用您的表单发送html,那么您希望过滤输入以仅允许您希望允许的那些标签。如果您想禁止用户发布任何html,您可以在将其输出回页面时转义他们发送的所有内容。在这两种情况下,您都可以依赖服务器端技术。如果您使用ajax 加载数据,您可以查看第三个答案here。前 2 个不安全(类型 0 xss)。 【参考方案1】:

您只需将&lt;&gt; 等特殊字符替换为实体,即可阻止用户提供的数据表现得像您的标记一样。如果用户输入的数据进入数据库,那么您获取并显示它并在该部分中看到问题。如果您的后端是 PHP,那么所有数据都应该在显示之前通过 htmlspecialchars() 传递,这将解决您的问题。参见文档:http://php.net/manual/de/function.htmlspecialchars.php

【讨论】:

事实上你应该尽快将数据传递给htmlspecialchars(),所以在保存到数据库或再次显示表单之前(例如表单填写错误)! 错了。你不应该保存它改变。保存数据但查看(显示)没有问题,因此您应该在正确的上下文中工作,这意味着在您的视图中,而不是模型中。 好吧,我有一个原始的和清理过的列,用于直接查看而不会忘记清理/清理......还有一个,如果我需要其他类型的原始(未更改)数据(主要是非网络)输出。在更简单的上下文中,我更喜欢只保存和使用“清理”版本。 我的意思是您不应该在保存时更改用户输入的数据,因为这样您会不可逆转地丢失原始数据并且保存此类数据不是问题(假设您听说过 sqlinjection :)。你说你做的正是我说的。您获得了额外的预处理数据,但您仍然拥有原始数据。所以没关系。 我对这个问题的看法是——对于回答此类问题的人——最好的方法是保存安全数据;)

以上是关于防止 HTML 表单中的 JS/CSS的主要内容,如果未能解决你的问题,请参考以下文章

防止表单中的值传递

如何防止表单中的默认值? [复制]

防止Form表单提交的客户端及服务器端的方式

HTML 表单 - 使用添加 Enter (CR) 后缀的条码扫描器防止表单提交输入

Orbeon Forms - 防止表单生成器覆盖表单中的模板

防止 Access 表单中的整个字段被突出显示