您的位置:首页 > 其它

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

2017-03-21 23:31 246 查看
     最近在开发一个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("\"",""",$body);//将全部的双引号转换成编码

通过这两步处理就能将原格式数据传输给用户
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: