前两天用ThinkPHP做网站开发,后台调用百度编辑器提交数据。在做前端的时候调取数据库显示文章内容,在页面上却显示出如<p></p> <strong></strong>之类的字符。于是查看数据库,发现在数据库中存储的内容为<p></p>&nbsp;<strong></strong> ,百度一下,发现<>$amp;分别是< > &的转义字符。
为什么要将这些特殊字符转义呢?一般来讲,用户输入的东西是不可信任的,如用户注册,用户评论等。所以不光要做好防止sql的注入,还要防止JS的注入,html的注入。举几个简单例子。
一。javascript注入的危害。
我在一个网站留言了,并且这个网站没有JS进行过滤,我在留言中加入以下内容
<script type="text/javascript">
for(i=0;i>=0;i++)
alert("我弹");
</script>
如果不对JS标签进行转义,那么将在浏览器上无限循环弹出警告框。转义到数据后,在前台调用的时候进行反转义,就可以将原始内容完完全全显示出来而不会造成危害。
二。html注入的危害
对用户输入的<p></p>等标签不进行转义的话,再向页面输出时会破坏页面的布局。
关于表单提交的特殊字符的处理方法,常用的PHP 函数有:
1. htmlspecialchars() ,作用:将与,单双引号,大小于号转成html格式 如:&转成& "转成&qout; '转成' <转成< >转成>
2. htmlspecialchars_decode() 作用:对应将上述字符进行反转义
3. addslashes() 作用:将单双引号,反斜线和null加上反斜线转义 如:'转成\' \转成\\ "转成\"
4. stripslashes() 作用: 对应的去掉上述特殊字符添加的反斜线,一个反斜线的话直接去掉,若是连续两个反斜线,则去掉一个,留下一个。
所以针对本文开始时提出的问题,只需在前台调用数据库向页面显示的时候用htmlspecialchars_decode()将数据进行反转义即可正确显示。