有的时候页面中会有一个输入框,用户输入内容后会显示在页面中,类似于网页聊天应用。如果用户输入了一段js脚本,比例:<script>alert('test');</script>,页面会弹出一个对话框,或者输入的脚本中有改变页面js变量的代码则会时程序异常或者达到跳过某种验证的目的。那如何防止这种恶意的js脚本攻击呢?通过html转义能解决这个问题。
一:什么是html转义?
html转义是将特殊字符或html标签转换为与之对应的字符。如:< 会转义为 <> 或转义为 >像“<script>alert('test');</script>”这段字符会转义为:“<script>alert('test');</script>”再显示时页面会将<解析为<,>解析为>,从而还原了用户的真实输入,最终显示在页面上 的还是“<script>alert('test');</script>”,即避免了js注入攻击又真实的显示了用户输入。
二:如何转义?
1、通过js实现
//转义 元素的innerHTML内容即为转义后的字符 function htmlEncode ( str ) { var ele = document.createElement('span'); ele.appendChild( document.createTextNode( str ) ); return ele.innerHTML; } //解析 function htmlDecode ( str ) { var ele = document.createElement('span'); ele.innerHTML = str; return ele.textContent; }
2、通过jquery实现
function htmlEncodeJQ ( str ) { return $('<span/>').text( str ).html(); } function htmlDecodeJQ ( str ) { return $('<span/>').html( str ).text(); }
3、使用
var msg=htmlEncodeJQ('<script>alert('test');</script>'); $('body').append(msg);
建议使用jquery实现,因为有更好的兼容性。
以上这篇浅谈html转义及防止javascript注入攻击的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。
本文向大家介绍Yii框架防止sql注入,xss攻击与csrf攻击的方法,包括了Yii框架防止sql注入,xss攻击与csrf攻击的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Yii框架防止sql注入,xss攻击与csrf攻击的方法。分享给大家供大家参考,具体如下: PHP中常用到的方法有: 调用: (必须放在接收数据之外) 注意: 表单提交值,为防止csrf攻击,控制器中需要加上:
问题内容: 我必须在我的java程序中添加一条语句以更新数据库表: 我听说可以通过SQL注入来利用此漏洞,例如: 我的程序具有Java GUI,并且从中检索所有名称,地址和电子邮件值。我想知道黑客如何将以下代码()添加到我的插入语句中,以及如何防止这种情况发生。 问题答案: 您需要使用PreparedStatement。例如 这样可以防止注入攻击。 黑客将其放入其中的方式是,如果您要插入的字符串来
本文向大家介绍PHP防止注入攻击实例分析,包括了PHP防止注入攻击实例分析的使用技巧和注意事项,需要的朋友参考一下 本文以实例形式详细分析了PHP防止注入攻击的方法。分享给大家供大家参考。具体分析如下: PHP addslashes() 函数--单撇号加斜线转义 PHP String 函数 定义和用法 addslashes() 函数在指定的预定义字符前添加反斜杠。 这些预定义字符是: 单引号 (
问题内容: 我有点困惑,PHP中有很多函数,有些使用这个,有些使用那个。有些人使用:,,等 哪个是正确的,你们通常使用什么? 这是正确的吗(如果有的话,建议我做一个更好的): 该行可以防止MySQL注入和XSS攻击? 顺便说一句,除了XSS攻击和MySQL注入之外,还有其他需要注意的事情吗? 编辑 结论: 如果我想将字符串插入数据库,则无需使用,只需使用即可。在显示数据时,请使用,这是您的全部意思
问题内容: 在将输入数据放入MySQL数据库之前,我可以在Perl中使用该功能来清理输入吗?我不太了解正则表达式,所以在我做自己的功能之前,我想知道是否已经有一个正则表达式。 问题答案: 清理要插入数据库的数据的正确方法是对所有要插入SQL字符串的变量使用占位符。换句话说,永远不要这样做: 而是使用占位符: 然后在执行查询时传递要替换的变量: 您可以将这些操作与某些DBI便捷方法结合使用。上面也可
问题内容: 当Angular插入标记并将范围变量插入样式模板时,它将转义HTML。 我正在构建的应用程序要求用户创建模板,使用大括号表示法插入变量名称,我不想通过引入某些变量的指令和其他变量的curlies来使其过于复杂。 有没有办法通过卷曲模板呈现未转义的HTML? 我唯一的选择是在用户尝试渲染时渲染代理元素,然后可以使用jQLite抓取并手动插入HTML,但这真是一团糟。有任何想法吗? 问题答