防止 XSS 攻击 解决方案
2015-03-27 17:53
204 查看
XSS又叫CSS英文缩写为Cross Site Script
中文意思为跨站脚本攻击
具体内容指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,
嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的.
解决方案
第一。过滤
过滤 标签 等字符 ,但是这样 对用户是不公平的。
第二。用asii 码替换
如 < > ! 等
第三 。 用 element.innerText 显示用户数据
这样要写大量的 js
第四。 使用 <xmp>
<xmp>标签不解析内部的html元素,而且不执行内部的javascript脚本代码
但是要防止攻击代码在数据中间插入</xmp>从而绕过保护
第五。通过 frame 来防止 数据页面攻击 主页面
使用 document.domain 属性 来控制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
>
<head>
<title>测试iframe的单向访问</title>
<style>
body
{
font-size:12px;
}
</style>
</head>
<script language="javascript">
//frame1的document
var oDocument=null;
//响应frame1的onload事件
function frame1_onload()
{
//旧的domain
var sDomainOld=document.domain;
//降级domain
document.domain="pimshell.com";
//保存frame1的document
oDocument=frame1.document;
//恢复domain
document.domain=sDomainOld;
//准备就绪
button1.disabled=false;
}
//改变IFrame的背景颜色
function changebackcolor()
{
if(oDocument.body.style.backgroundColor=="")
oDocument.body.style.backgroundColor="blue";
else
oDocument.body.style.backgroundColor="";
}
</script>
<body>
为了避免XSS跨站攻击,在大多数html编辑器的设计中,都是要将用户输入的HTML内容进行过滤。过滤代码繁琐暂且不说,关键是不能保证考虑到所有已知和未知的攻击类型。
<br
/>
如果我们能设计一个iframe的单向访问模型,就可以让用户输入的HTML内容在受控的环境中执行,也就不需要再进行过滤了。
<br
/>
举例来说,我们html编辑器所在的主页面为a,嵌入一个iframe为b。a可以访问b的内容,而b却不能访问a的内容。这样的话,b中的HTML内容即使包含攻击代码,也无法发挥作用了。
<br
/>
<br />
<table>
<tr>
<td width="300px;"
valign="top">
<iframe src="http://bb.pimshell.com/pimshell/test/b.htm"
id="frame1" onload="frame1_onload();"></iframe>
<br
/>
<br />
<button id="button1"
onclick="changebackcolor();" disabled>-->
改变IFrame的背景颜色</button>
</td>
<td valign="top">
iframe中的代码:
<br />
<pre
style="background-color:whitesmoke; border:dashed 1px black;
padding:4px;">
<script language="javascript">
//domain
document.domain="pimshell.com";
//访问主页面试试看
function geta()
{
alert(parent.document.body.innerHTML);
}
</script>
</pre>
<br
/>
主页面中的代码:
<br />
<pre
style="background-color:whitesmoke; border:dashed 1px black;
padding:4px;">
<script language="javascript">
//frame1的document
var oDocument=null;
//响应frame1的onload事件
function
frame1_onload()
{
//旧的domain
var sDomainOld=document.domain;
//降级domain
document.domain="pimshell.com";
//保存frame1的document
oDocument=frame1.document;
//恢复domain
document.domain=sDomainOld;
//准备就绪
button1.disabled=false;
}
//改变IFrame的背景颜色
function
changebackcolor()
{
if(oDocument.body.style.backgroundColor=="")
oDocument.body.style.backgroundColor="blue";
else
oDocument.body.style.backgroundColor="";
}
</script>
</pre>
</td>
</tr></table>
</table>
</div>
</body>
</html>
中文意思为跨站脚本攻击
具体内容指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,
嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的.
解决方案
第一。过滤
过滤 标签 等字符 ,但是这样 对用户是不公平的。
第二。用asii 码替换
如 < > ! 等
第三 。 用 element.innerText 显示用户数据
这样要写大量的 js
第四。 使用 <xmp>
<xmp>标签不解析内部的html元素,而且不执行内部的javascript脚本代码
但是要防止攻击代码在数据中间插入</xmp>从而绕过保护
第五。通过 frame 来防止 数据页面攻击 主页面
使用 document.domain 属性 来控制
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html
xmlns="http://www.w3.org/1999/xhtml"
>
<head>
<title>测试iframe的单向访问</title>
<style>
body
{
font-size:12px;
}
</style>
</head>
<script language="javascript">
//frame1的document
var oDocument=null;
//响应frame1的onload事件
function frame1_onload()
{
//旧的domain
var sDomainOld=document.domain;
//降级domain
document.domain="pimshell.com";
//保存frame1的document
oDocument=frame1.document;
//恢复domain
document.domain=sDomainOld;
//准备就绪
button1.disabled=false;
}
//改变IFrame的背景颜色
function changebackcolor()
{
if(oDocument.body.style.backgroundColor=="")
oDocument.body.style.backgroundColor="blue";
else
oDocument.body.style.backgroundColor="";
}
</script>
<body>
为了避免XSS跨站攻击,在大多数html编辑器的设计中,都是要将用户输入的HTML内容进行过滤。过滤代码繁琐暂且不说,关键是不能保证考虑到所有已知和未知的攻击类型。
<br
/>
如果我们能设计一个iframe的单向访问模型,就可以让用户输入的HTML内容在受控的环境中执行,也就不需要再进行过滤了。
<br
/>
举例来说,我们html编辑器所在的主页面为a,嵌入一个iframe为b。a可以访问b的内容,而b却不能访问a的内容。这样的话,b中的HTML内容即使包含攻击代码,也无法发挥作用了。
<br
/>
<br />
<table>
<tr>
<td width="300px;"
valign="top">
<iframe src="http://bb.pimshell.com/pimshell/test/b.htm"
id="frame1" onload="frame1_onload();"></iframe>
<br
/>
<br />
<button id="button1"
onclick="changebackcolor();" disabled>-->
改变IFrame的背景颜色</button>
</td>
<td valign="top">
iframe中的代码:
<br />
<pre
style="background-color:whitesmoke; border:dashed 1px black;
padding:4px;">
<script language="javascript">
//domain
document.domain="pimshell.com";
//访问主页面试试看
function geta()
{
alert(parent.document.body.innerHTML);
}
</script>
</pre>
<br
/>
主页面中的代码:
<br />
<pre
style="background-color:whitesmoke; border:dashed 1px black;
padding:4px;">
<script language="javascript">
//frame1的document
var oDocument=null;
//响应frame1的onload事件
function
frame1_onload()
{
//旧的domain
var sDomainOld=document.domain;
//降级domain
document.domain="pimshell.com";
//保存frame1的document
oDocument=frame1.document;
//恢复domain
document.domain=sDomainOld;
//准备就绪
button1.disabled=false;
}
//改变IFrame的背景颜色
function
changebackcolor()
{
if(oDocument.body.style.backgroundColor=="")
oDocument.body.style.backgroundColor="blue";
else
oDocument.body.style.backgroundColor="";
}
</script>
</pre>
</td>
</tr></table>
</table>
</div>
</body>
</html>
相关文章推荐
- 防止 XSS 攻击 解决方案
- 防止 XSS 攻击 解决方案
- 防止 XSS 攻击 解决方案
- 很好用的 web防止sql 注入 xss 攻击 目录遍历代码
- Java防止跨站脚本(XSS)注入攻击
- PHP的$_SERVER['PHP_SELF']造成的XSS漏洞攻击及其解决方案
- java 防止 XSS 攻击的常用方法总结.
- 考虑使用AntiXss.HtmlEncode方法来防止跨站点脚本攻击
- Java防止跨站脚本(XSS)注入攻击
- 实用:防止SQL、XSS等注入攻击的Filter
- XSS跨域攻击和SQL注入解决方案
- java 防止 XSS 攻击的常用方法总结.
- 案例!使用CSP防止XSS 攻击入门
- java 防止 XSS 攻击的常用方法总结
- java防止xss脚本注入攻击,采用spring工具类方式
- jsp 前端防止 xss 注入攻击
- RO IOCP开发心得系列(01):服务器程序防止Socket攻击的解决方案
- Laravel 5 中防止 XSS 跨站攻击的例子
- Laravel 5 中防止 XSS 跨站攻击的例子
- PHP防止被xss和sql语 cd6d 句注入攻击的方法(网站和app通用)