XSS过滤函数,大家瞧瞧能不能改进,按照PHP的过滤函数来的
发布于 12 年前 作者 initphp 8052 次浏览 最后一次编辑是 8 年前

基本的过滤XSS函数,输出的时候进行过滤,输出的时候不要将内容写进html标签内

	/*	
 *	说明:过滤XSS
 * 	使用:
 *	initnode.request.xss(val);
 */
this.xss = function (val) {
	val = val.replace(/[<%3C]/g, "<");
	val = val.replace(/[>%3E]/g, ">");
	val = val.replace(/"/g, """);
	val = val.replace(/'/g, "&#39;");
	return val;
}
13 回复

是不是将 javascript / onclick 等这样的关键词也过滤掉?

理论上不需要,输出的时候用这个函数过滤 替换了 < > ’ " 标签,理论上一般无法组装成功

刚才看node模块 validator 的源码,发现它的xss()过滤了所有html 和javascript关键字呢

@initphp 把所有的<>都替换了,就没办法发图片了,不能因噎废食

@leizongmin 是的,有时候希望只限制危险TAG,这样就能图文并茂

@j4cnodejs 做防注入永远不要用黑名单,只用白名单

人类已经无法阻止cnodejs被XSS了!

这个过滤方法一直在我php框架中用,开源软件有些也是这样的过滤 主要是输出的时候过滤就行了 但是会碰到一些需要输出HTML的情况,这些就得特殊处理了

@initphp 实验证明: sanitize().xss()只清除危险脚本, 不会破坏安全的HTML标签, 所以尽管放心去用!

@j4cnodejs 看了下 的确很复杂,但是我个人觉得过于复杂了,我这个应该能满足需求,php中就这么干…

@leizongmin <img src="{变量}"/> 这样就可以了… 遇到编辑器之类的另外处理

@initphp 晕死,发HTML全部被过滤了…尴尬

@initphp 安全的html标签不会被过滤的, 不安全(可能被执行的脚本)才会过滤掉

回到顶部