富文本输入框控件没做安全处理被XSS攻击了
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
前言相信很多前端小伙伴项目中都用到了富文本,但你们有没有做防 啊这....,那我就去解决一下吧,顺便从 先说说什么是XSS攻击?「简述」:
|
|||||||
全部评论1 | |
![]() |
admin
![]() 2025年1月2日 13:6
点晴公司的解决代码,用以下代码做提交前的预处理,输出时再临时转换为正常的HTML代码,并且屏蔽掉iframe和script:
function HtmToTxt(tmpInfo)/g, });
str_info = str_info.replace(/,/g, ,);
str_info = str_info.replace(/\+/g, +);
str_info = str_info.replace(/\/g, );
str_info = str_info.replace(/!/g, !);
str_info = str_info.replace(/\'/g, ');
str_info = str_info.replace(/;/g, ;);
str_info = str_info.replace(/\//g, /);
str_info = str_info.replace(/-/g, -);
str_info = str_info.replace(/#/g, #);
str_info = str_info.replace(/\r\n/g,
);
str_info = str_info.replace(/\n/g,
);
str_info = str_info.replace(/ /g, );
str_info = str_info.replace(/script/gi, script);
str_info = str_info.replace(/select/gi, select);
str_info = str_info.replace(/update/gi, update);
str_info = str_info.replace(/delete/gi, delete);
str_info = str_info.replace(/from/gi, from);
str_info = str_info.replace(/where/gi, where);
str_info = str_info.replace(/create/gi, create);
str_info = str_info.replace(/alter/gi, alter);
str_info = str_info.replace(/drop/gi, drop);
str_info = str_info.replace(/truncate/gi, truncate);
str_info = str_info.replace(/insert/gi, insert);
str_info = str_info.replace(/union/gi, union);
str_info = str_info.replace(/exec/gi, exec);
str_info = str_info.replace(/\?/g, ?);
str_info = str_info.replace(/\[/g, [);
str_info = str_info.replace(/\]/g, ]);
}
return str_info;
}
function TxtToHtm(tmpInfo)/g, });
str_info = str_info.replace(/,/g, ,);
str_info = str_info.replace(/+/g, +);
str_info = str_info.replace(//g, \);
str_info = str_info.replace(/!/g, !);
str_info = str_info.replace(/'/g, ');
str_info = str_info.replace(/;/g, ;);
str_info = str_info.replace(///g, /);
str_info = str_info.replace(/-/g, -);
str_info = str_info.replace(/#/g, #);
str_info = str_info.replace(/ /g, );
str_info = str_info.replace(/ /g, );
str_info = str_info.replace(/ /g, );
str_info = str_info.replace(//g, \);
str_info = str_info.replace(/'/g, ');
str_info = str_info.replace(/
/g, \r\n);
str_info = str_info.replace(/
/g, \r\n);
str_info = str_info.replace(/
/g, \r\n);
str_info = str_info.replace(/select/g, select);
str_info = str_info.replace(/update/g, update);
str_info = str_info.replace(/delete/g, delete);
str_info = str_info.replace(/from/g, from);
str_info = str_info.replace(/where/g, where);
str_info = str_info.replace(/create/g, create);
str_info = str_info.replace(/alter/g, alter);
str_info = str_info.replace(/drop/g, drop);
str_info = str_info.replace(/truncate/g, truncate);
str_info = str_info.replace(/insert/g, insert);
str_info = str_info.replace(/union/g, union);
str_info = str_info.replace(/exec/g, exec);
str_info = str_info.replace(/\<script/gi, <script);
str_info = str_info.replace(/\<\/script\>/gi, <script);
str_info = str_info.replace(/\<iframe/gi, <iframe);
str_info = str_info.replace(/\<\/iframe\>/gi, </iframe>);
}
if ((str_info+CS).indexOf($)>-1 && (str_info+CS).indexOf(@)>-1));
str_info = str_info.replace(/\$10\@/g, ,);
str_info = str_info.replace(/\$11\@/g, +);
str_info = str_info.replace(/\$12\@/g, \);
str_info = str_info.replace(/\$13\@/g, !);
str_info = str_info.replace(/\$14\@/g, ');
str_info = str_info.replace(/\$15\@/g, ;);
str_info = str_info.replace(/\$16\@/g, /);
str_info = str_info.replace(/\$17\@/g, -);
str_info = str_info.replace(/\$18\@/g, #);
str_info = str_info.replace(/\$19\@/g, );
str_info = str_info.replace(/\$20\@/g, );
str_info = str_info.replace(/\$21\@/g, \);
str_info = str_info.replace(/\$22\@/g, ');
str_info = str_info.replace(/\$23\@/g, \r\n);
str_info = str_info.replace(/\$24\@/g, \r\n);
str_info = str_info.replace(/\$25\@/g, \r\n);
str_info = str_info.replace(/\$26\@/g, );
str_info = str_info.replace(/\$27\@/g, script);
str_info = str_info.replace(/\$28\@/g, select);
str_info = str_info.replace(/\$29\@/g, update);
str_info = str_info.replace(/\$30\@/g, delete);
str_info = str_info.replace(/\$31\@/g, from);
str_info = str_info.replace(/\$32\@/g, where);
str_info = str_info.replace(/\$33\@/g, create);
str_info = str_info.replace(/\$34\@/g, alter);
str_info = str_info.replace(/\$35\@/g, drop);
str_info = str_info.replace(/\$36\@/g, truncate);
str_info = str_info.replace(/\$37\@/g, insert);
str_info = str_info.replace(/\$38\@/g, union);
str_info = str_info.replace(/\$39\@/g, exec);
str_info = str_info.replace(/\$40\@/g, ?);
str_info = str_info.replace(/\$41\@/g, [);
str_info = str_info.replace(/\$42\@/g, ]);
str_info = str_info.replace(/\<script/gi, <script);
str_info = str_info.replace(/\<\/script\>/gi, <script);
str_info = str_info.replace(/\<iframe/gi, <iframe);
str_info = str_info.replace(/\<\/iframe\>/gi, </iframe>);
}
return str_info;
}附件:HtmToTxt.rar
该评论在 2025/1/2 13:08:25 编辑过
|