RegExp过滤非法标签&正则匹配IP地址

RegExp过滤非法标签&正则匹配IP地址

  • 采用正则表达式防止前端html注入
    如果文本域中包含html标签内容 ,进行非法攻击
<body>
    <!-- -->
       html注入演示<script type="text/javascript">window.open("http://www.baidu.com","_blank");</script>里面怎么会有百度页面呢?<iframe src="http://www.baidu.com"></iframe>需要屏蔽哦!
    <textarea id="txt" rows="20" cols="60"></textarea>
    <input type="button" value="html注入测试" onclick="show()" /> 
</body>

同样的还有SQL注入
正则表达式即可以完成前端的html注入的功能,也可以完成SQL注入的功能

java中jdbc处理得当可以在后台避免SQL注入

需要在后端也做一定的防止注入

前端防止注入

    function show(){
        var txt=document.getElementById('txt').value;
        console.info(txt);
        // txt=txt.replace(/<\/?(style|script|i?frame)(.|\n)*?>/gi,'');//此处不会匹配标签之间的内容
        txt=txt.replace(/<(style|script|i?frame)(.|\n)*?>(.|\n)*?<\/(style|script|i?frame)(.|\n)*?>/gi,' ');//取出掉标签之间的内容
        console.info(txt);
    }
  • 正则表达式匹配IP地址
    IP地址的语法: 长度是32位,分成4段,每段8位(2进制),如果用十进制来表示则范围为0~255, 段与段之间.来表示

    合法: 192.168.1.1 224.34.2.34 非法: 256.234.2.1 保留IP地址: 0.0.0.0 255.255.255.255(合法地址 )

中括号只匹配一个字符
([0-255].){3}[0-255] 这样的话19匹配不成功 因为之匹配1
([0-255]{3}.){3}[0-255]也是匹配不成功的
因为这样包含999. 因为9在0-255范围内

       如果整体匹配有问题,则应该分开匹配: 拆分是根据经验.怎么方便怎么来
       250~255:  25[0-5]
       200~249:  2[0-4]\d
       0~199:
           0-9:  \d    =====>  [1-9]?\d
           10~99: [1-9]\d  ====>[1-9]?\d
           100~199   1\d{2}
    */
    var reg=/^(?:(?:25[0-5]|2[0-4]\d|[1-9]?\d|1\d{2})\.){3}(?:25[0-5]|2[0-4]\d|[1-9]?\d|1\d{2})$/;
    var ip="255.255.255.255";
    console.info(ip.match(reg));

注意?:是为了不分组
^ $是为了控制完整匹配 如果不加 则255.255.255.01也可以匹配成功 返回 255.255.255.0

  • 正则表达式的exec和test的使用
    需求:根据qq邮箱匹配qq号,其它邮箱不用管

    var email = “[email protected],[email protected],[email protected]”;
    // match:如果是全局匹配(g)那么是不支持分组的, 一般g与 ^ $ 是互斥
    console.info(email.match(/(\d+)@qq.com/g));

全局匹配 是为了查找
而整体匹配(完全匹配)是为了校验(针对一个邮箱)

// RegExp: exec 支持全局+分组功能, 默认情况每次只查找一个 即每次查找第一个

var regExp=new RegExp(/(\d+)@qq.com/g);
console.info(regExp.exec(email));
    // 当匹配成功下一次继续执行索引值会存储到lastindex中
    console.info(regExp.lastIndex);//查找出第二个
    console.info(regExp.exec(email));
    //如果有第三个匹配值,如果此时现在修改index的值,则从头开始匹配
    regExp.lastIndex=0
    console.info(regExp.exec(email));
var email = "10000
@qq.com,[email protected],[email protected]";
var regExp=new RegExp(/(\d+)@qq.com/g);
while(temp=regExp.exec(email)){      // js中: null,0,false,undifend  代表假false
    console.info(temp[0] + "," + temp[1]);
}

结果

这里写图片描述

test方法:
返回一个boolean值,它指出被查找字符串中是否存在模式

// test: 一般用于表单验证.如果匹配成功返回true 否则返回false,所以一般都会有^ 和 $搭配使用

var regExp=new RegExp(/^1[3589]\d{9}$/);
console.info(regExp.test(12312345678));
console.info(regExp.test(18234124251));

猜你喜欢

转载自blog.csdn.net/qq_19704045/article/details/80375127
今日推荐