存档

文章标签 ‘安全’

php自定义的magicStr过滤类

2020年11月2日 评论已被关闭
<?php
//使用说明:http://www.zhanghongliang.com/article/1507
class magicStr{
	//入库操作
	function encode($str,$inputType='text'){
		if($inputType=='text'){
			//此种类型应该过滤换行符,再去左右空格(建议过滤nl换行,不过滤也不影响)
			return trim(str_replace(array("\\r\\n","\\r","\\n"),'',str_replace(array("\r\n","\r","\n"),'',$str)));
		}
		else if($inputType=='textarea'){return $str;}
		else if($inputType=='editor'){return $str;}
		else {return '';}
	}
	
    //pc+h5端返回处理函数
    function decode($str,$inputType='text'){
        if($inputType=='text'){return htmlspecialchars(trim($str),ENT_QUOTES);}
		else if($inputType=='in_text'){return htmlspecialchars($str,ENT_QUOTES);}
        else if($inputType=='textarea'){return nl2br(htmlspecialchars($str,ENT_QUOTES));}
        else if($inputType=='in_textarea'){return htmlspecialchars($str,ENT_QUOTES);}
        else if($inputType=='editor'){return $this->replaceLabel($this->removeScript($str));}
        else if($inputType=='in_editor'){
			//kindeditor要求必须是转为实体之后的赋值,也可以增加$this->removeScript($str),因为只要前台过滤即可
            return htmlspecialchars($str,ENT_QUOTES);
        }
		else if($inputType=='meta_title'){
			//当输出到meta中的title的时候,不建议使用textarea或者editor内容,只建议用input type="text"这种输入框
			return htmlspecialchars($str,ENT_QUOTES);
		}
		else if($inputType=='meta_keywords'){return htmlspecialchars($this->compress_html($str),ENT_QUOTES);}
		else if($inputType=='meta_description'){return mb_substr(htmlspecialchars($this->compress_html($str),ENT_QUOTES),0,210);}
        else {return '';}
    }

    //app端返回处理函数(在需要php处理的情况下)
	//$withHtmlBody为是否app端拼接了标准的html头和尾标签:<!doctype html><html><head><meta charset="utf-8"><title>标题</title></head><body>$str</body></html>
    function decodeApp($str,$inputType='text',$withHtmlBody=true){
		if($inputType=='text'){return $str;}
		else if($inputType=='in_text'){return $str;}
        else if($inputType=='textarea'){
			//如果app端拼接html头和尾则应该转义后返回(我们的项目实际上都拼了),否则可以直接返回
			if($withHtmlBody===true){return htmlspecialchars($str,ENT_QUOTES);}
			else {return $str;}
		}
        else if($inputType=='in_textarea'){return $str;}
        else if($inputType=='editor'){return preg_replace('/<br\\s*?\/??>/i','',$this->replaceLabel($this->removeScript($str)));}
        else if($inputType=='in_editor'){return 'app不允许富文本编辑';}
        else {return '';}
    }
	
    //小程序端返回处理函数(在需要php处理的情况下)
    function decodeWeixin($str,$inputType='text'){
		if($inputType=='text'){return $str;}
		else if($inputType=='in_text'){return $str;}
        else if($inputType=='textarea'){return $str;}
        else if($inputType=='in_textarea'){return $str;}
        else if($inputType=='editor'){
			//经过测试,微信小程序端只有editor类型需要处理,其他类型直接返回即可
        	//经过测试,小程序端和app端不一样,小程序端不需要和removeScript,但是要做下方处理:
			return $this->replaceLabel(htmlspecialchars_decode(preg_replace('/<br\\s*?\/??>/i','',$str),ENT_QUOTES));
		}
        else if($inputType=='in_editor'){return 'weixin不允许富文本编辑';}
        else {return '';}
    }

	//替换指定的html标签(富文本编辑器修改了插入标签之后的代码,显示的时候需要替换正确)
	function replaceLabel($str){
		return preg_replace('/(\[)(embed.*?)(\/\])/is','<$2>',preg_replace('/\]\[\/iframe\]/is','></iframe>',preg_replace('/\[iframe/is','<iframe',$str)));
		//也可以是<$2/>表示用单标签结尾
    }
	
	//压缩html
	function compress_html($string) {
		return trim(preg_replace(array("/> *([^ ]*) *</","/<!--[^!]*-->/","'/\*[^*]*\*/'","/\r\n/","/\n/","/\t/",'/>[ ]+</'),array(">\\1<",'','','','','','><'),$string));
	}

	//过滤一些script标签和代码
    function removeScript($str=''){
		return preg_replace(array(
			"/(java|vb)script/i",
			"/href *= *[\s\S]*script *:/si",
			
			//过滤字符串中的on***=,(onclick,onchange,onblur等等等)事件,忽略大小写(i),特殊字符圆点,中包含换行符 \n(s)
			"/on([a-z]+)\s*=/si",
			
			//不用preg_replace("/<(i?frame.*?)>(.*?)<(\/i?frame.*?)>/si",'',$str);的原因是比如<iframe src="https://www.a.com">会无法过滤,但是前段可以正常显示
			//同样会过滤frameset
			"/<(\/?i?frame.*?)>/si",
			"/<(\/?object.*?)>/si",//道理同上方的iframe过滤
			"/<(\/?embed.*?)>/si",//道理同上方的iframe过滤
			
			//过滤所有<script(任意字符)>(任意字符)</script(任意字符)>结尾的标签字符 和前条过滤script标签重合
			//不用preg_replace("/<(\/?script.*)>/si",'',$str);是因为</script>不闭合的话,前段无法执行
			"/<(script.*?)>(.*?)<(\/script.*?)>/si",
			
			//使用preg_replace("/<(\/?head.*?|\/?title.*?|meta.*?|link.*?)>/si",'',$str);可以保留中间的内容
        	//使用下方的会过滤中间的内容
			"'<head[^>]*?>.*?</head>'is",
            "'<title[^>]*?>.*?</title>'is",
            "'<meta[^>]*?>'is",
            "'<link[^>]*?>'is"
		),'',$str);
    }
	
	//ajax返回处理函数(ajax建议用前端magicStr.js处理,节省php资源)
	/*
    function decodeAjax($str,$inputType='text'){
        if($inputType=='text'){return htmlspecialchars($str,ENT_QUOTES);}
		else if($inputType=='in_text'){return $str;}
        else if($inputType=='textarea'){return nl2br(htmlspecialchars($str,ENT_QUOTES));}
        else if($inputType=='in_textarea'){
            return $str;//和decode()不一样,ajax直接返回即可,因为前端是.val赋值
        }
        else if($inputType=='editor'){return $this->replaceLabel($this->removeScript($str));}
        else if($inputType=='in_editor'){
            //和decode()不一样,ajax直接返回即可,因为前端是.val赋值
			//编辑器输出的时候,其实可以不用走$inputType=='editor'中的$this->removeScript($str),因为只要前台过滤即可
			return $str;
        }
		else if($inputType=='meta_title'){return htmlspecialchars($str,ENT_QUOTES);}
        else {return '';}
    }
	*/

}

具体请参照文件:magicStr.rar

分类: html总结, php学习 标签: , , , ,

如何将一个PHP字符串安全赋值给Javascript变量(包含引号和换行符的)

2015年7月24日 没有评论

正解:

<script>
var content='<?php echo str_replace(array(“\r”, “\n”), array(”, ‘\n’), addslashes($content));?>’;
</script>

如何让用户存入mysql的密码更安全

2015年4月2日 没有评论

用户密码安全一直是很需要深入探讨的问题

常见的有:

1,普通md5或者hash(或组合)

2,mysql数据库字段salt,就是传说中的加盐

3,php程序salt加盐

比如以下情况:

//mysql字段
id,pwd,salt
//返回加密之后的字符串
//传入参数为:用户输入密码+mysql盐+php盐
function myMd5($userpwd,$salt_mysql,$salt_php){
return hash(‘md5’,$salt_mysql.$userpwd.$salt_php);
}

当然这只是最基本的

中间有很多想法,比如:

1,将mysql盐和php盐组合之后加密,再组合pwd,再加密

2,将pwd前N位拆分成2个,分别组合mysql盐和php盐后加密,再加密总的

等等方法可以自行思考。

说明:此方法只能防君子不防小人

想要mysql的密码更安全,请参考:http://www.zhihu.com/topic/19621679

为了师生的生命安全

2013年5月21日 没有评论

全面提高防灾逃生技能,切实保障广大师生的利益。合肥一六八陶冲湖学校初一年级5月20日上午组织了一次防空防灾应急疏散演练。

此次演习之前,政教处吴勇主任布置老师认真做好演练各项工作:要求全体师生高度重视防空防灾疏散演练过程中的安全工作,提高认识,明确责任分工,周密部署,确保演练活动顺利进行。
上午9:18分,随着警报的响起,初一年级全体学生在老师的引导下,按照学校的应急疏散预案,从教室有秩序迅速撤离教学楼,安全集结在学校的广场上,前后共用时二分钟。疏散演练结束后,吴勇主任对此次的防空防灾疏散演练进行了点评。

通过本次疏散演练,使广大师生掌握疏散程序,了解疏散路线,熟悉疏散场所,真正提升在应对各种自然灾害条件下的自救和互救能力,最大限度保证广大师生的生命安全。

本文转自:合肥168中学

分类: 张宏良张洪量 标签: ,
css.php