一个XSS攻击的例子

一个XSS攻击的例子


一个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带来的问题 
    1. 如果使用html,那就可以不用.val(),获取值部分可以改为$(‘#objectKey’).html();
    2. 使用.html,没有做到防XSS,所有需主动显示到页面的字段,都应做好防XSS
    3. “文件”那一栏并不是input元素,而是span元素,不要使用.val,而应使用.text
  • 改写建议
1. 初始值
    $('#objectKey').text(escape('<script>alert(1)'));
2. 获取值
    $('#objectKey').text();
3. escape方法
function escape(val) {
    if (!val) {
        return'';
    }
    var htmlEscapes = {
        '&':'&amp;',
        '<':'&lt;',
        '>':'&gt;',
        '"':'&quot;',
        "'":'&#x27;',
        '/':'&#x2F;'
    };
    var htmlEscaper = /[&<>"'\/]/g;
    return ('' + val).replace(htmlEscaper, function(match) {
        return htmlEscapes[match];
    });
}
  • 附 
    jQuery的html(),text()和val()区别 
    1、.html()用为读取和修改元素的HTML标签 <br>2、.text()用来读取或修改元素的纯文本内容 span div 元素 <br>3、.val()用来读取或修改表单元素的value值 input 元素

相关推荐