Fork me on GitHub

php安全编程之过滤用户输入和输出转义

今天的主题是php安全编程需要注意的两个地方:用户输入和内容输出

一、过滤用户输入

 在大多数动态网页中,用户都可以提交表单来提交特定的内容,比如注册,评论,聊天等等。

那么在用户将表单提交后,我们后台人员需要注意哪些呢?

1.永远不能相信用户提交的内容

2.在将用户提交内容入库前一定要做验证和过滤。

那么为何我们不能相信用户提交的内容?又有哪些消息信息会对我们造成损害呢?且听我慢慢道来。

例一、当用户使用手机号注册某网站会员时,一般网站会通过js+ajax后台验证手机号合法与否。

这个处理的目的在于确认用户使用有效的手机号注册,因为只有有效的手机号才能为我们所用,让我们和用户有更多的互动,进而提取其中暗含的价值。

 

例二、恶意评论:有些用户会发送恶意评论,妄图对数据库的内容进行操作,这时如果我们不对用户提交的内容作求过滤的话,可能会给公司带来不可预估的损失。

例如,提交评论时,用户输入 this is a bad comment"; DELETE FROM user;

上面的内容如果不做过滤,而且正好数据库中有user表,且用户有user表的操作权限,那么悲剧就可能发生了,user这张表就会被用户删除;想想都可怕。。。

不过在php中我们只需简单的使用一个函数就可以有效的阻止上述情况的发生。mysqli_real_escape_string(),使用该函数可以有效的转义对数据库操作有影响的字符。

这样就不会对数据库有危害了。

 

二、转义输出

比如用户的评论内容中有js脚本。这个js可能会在显示评论时执行,这时如果这个脚本有一定的危险操作,那么这将是很危险的。因此我们在输出用户评论时,需要转义评论的内容。

php中有两个函数htmlspecialchars和htmlentities,前者用来转义&,>,<等字符,后者是转义所有html标签,这样在前台显示评论时,脚本就失效了。保证了访问者信息的安全。

例如:<script>this.document = 某个网站地址?+this.cookie</script>  转义后会变成 &lt;script&gt;this.document = 某个网站地址?+this.cookie&lt;/script&gt;

 

以上就是我对php安全编程的一些方法总结,感谢您的阅读

注:因本人的技术有限,如果有理解错误的地方,还请各位批评指正,共同交流学习,谢谢大家。我会继续努力的。

 

posted @ 2016-11-24 14:04  lovecucu  阅读(1332)  评论(0编辑  收藏  举报