一个XSS攻击的例子
- jsp代码
<div id="getObjectUrlPanel" class="hide">
<form id="getObjectUrlForm" class="form-horizontal" >
<div class="row" style="margin-bottom: 0px;">
<div class="control-group span">
<label class="control-label" style="width: 60px;">
文件 :
</label>
<div class="controls">
<div class="contentLong">
<label class="control-label"
style="text-align: left;
width: 300px;" id="objectKey"></label>
</div>
</div>
</div>
</div>
<div class="row" style="margin-top:23px; height:70px;">
<div class="control-group span">
<label class="control-label" style="width:60px;">
地址 :
</label>
<div class="controls">
<div id="getObjectUrlDiv">
请输入链接有效时间: <input type="text"
id="timeOut" name="timeOut"
{required:true,regexp:/^[1-9]\d*$/}"
data-messages="{regexp:'只能为正整数!'}" />秒
<button id="getObjectUrl" type="button"
class="button button-small">
<i class="icon-search"></i>获取URL</button>
</div>
<div class="contentLong">
<a id="objectUrl" target="_blank"></a>
</div>
</div>
</div>
</div>
</form>
</div>
- 错误的js代码
1. 初始值
$('#objectKey').val('<script>alert(1)');
$('#objectKey').html('<script>alert(1)');
2. 获取值
$('#objectKey').val();
- 以上js带来的问题
- 如果使用html,那就可以不用.val(),获取值部分可以改为$(‘#objectKey’).html();
- 使用.html,没有做到防XSS,所有需主动显示到页面的字段,都应做好防XSS
- “文件”那一栏并不是input元素,而是span元素,不要使用.val,而应使用.text
- 改写建议
1. 初始值
$('#objectKey').text(escape('<script>alert(1)'));
2. 获取值
$('#objectKey').text();
3. escape方法
function escape(val) {
if (!val) {
return'';
}
var htmlEscapes = {
'&':'&',
'<':'<',
'>':'>',
'"':'"',
"'":''',
'/':'/'
};
var htmlEscaper = /[&<>"'\/]/g;
return ('' + val).replace(htmlEscaper, function(match) {
return htmlEscapes[match];
});
}
- 附
jQuery的html(),text()和val()区别1、.html()用为读取和修改元素的HTML标签
2、.text()用来读取或修改元素的纯文本内容 span div 元素
3、.val()用来读取或修改表单元素的value值 input 元素