web开发中如何保存textarea中的格式 又能防御XSS攻击

来源:互联网 发布:铜陵网络台 编辑:程序博客网 时间:2024/05/16 01:20

     最近在开发一个web项目中的内部邮箱系统时被一个问题卡住了,我希望能通过邮箱向用户推送各类信息并且用户能原样式浏览。但是又希望对输入进行过滤防止恶意的XSS攻击。

     一般而言,我们都会在服务器端使用htmlspecialchars(nl2br($str))对内容进行过滤防止XSS攻击,但是使用了这个方式,用户就没法原样式浏览信息。

    如果不进行过滤,第一存在极大的安全风险,第二一些换行引号等特殊字符会导致json数据传输出错。

   解决方案:

  第一步:在js文件中使用如下代码

        var str= jQuery("#emailcontent").val();//获取指定id的textarea值
        var strs= new Array(); //定义一数组
        var content = "";
        strs=str.split("\n"); //字符分割
        for (var i=0;i<strs.length ;i++ )
        {
            content += "<p style='text-indent: 2em;'>"+strs[i]+"</p>"; //分割后的字符输出, style='text-indent: 2em;首行缩进
        }


上面的js代码的含义是,将用户输入的数据取出来,并且对换行进行分割,对每一行使用<p></p>包裹起来,如果使用POST传输的话还需要进行如下操作

jQuery("#emailcontent").val(content);//将处理过的数据放到textarea中


第二步:服务器端处理 php

$body    = strip_tags($_POST["emailcontent"],"<p></p>");//去除掉数据中的全部html标签,仅保留<p></p>标签
$body    = str_replace("\"","&QUOT",$body);//将全部的双引号转换成编码


通过这两步处理就能将原格式数据传输给用户



0 0
原创粉丝点击