当前位置:首页 > PHP教程 > php应用 > 列表

php 一些基本安全处理技巧

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-23 16:06:23 浏览: 评论:0 

对于一些常见的输出目标(包括客户端、数据库教程和URL)的转义,PHP 中有内置函数可用.

如果你要写一个自己算法,做到万无一失很重要,需要找到在外系统中特殊字符的可靠和完整的列表,以及它们的表示方式,这样数据是被保留下来而不是转译了.

最常见的输出目标是客户机,使用htmlentities( )在数据发出前进行转义是最好的方法,与其它字符串函数一样,它输入是一个字符串,对其进行加工后进行输出,但是使用htmlentities( )函数的最佳方式是指定它的两个可选参数:引号的转义方式(第二参数)及字符集(第三参数),引号的转义方式应该指定为ENT_QUOTES,它的目的是同时转义单引号和双引号,这样做是最彻底的,字符集参数必须与该页面所使用的字符集相必配.

为了区分数据是否已转义,我还是建议定义一个命名机制,对于输出到客户机的转义数据,我使用$html 数组进行存储,该数据首先初始化成一个空数组,对所有已过滤和已转义数据进行保存,实例代码如下:

  1. <?php 
  2. $html = array( ); 
  3. $html['username'] = htmlentities($clean['username'], ENT_QUOTES, 'UTF-8');//开源代码phpfensi.com 
  4. echo "<p>Welcome back, {$html['username']}.</p>"
  5. ?> 

小提示:htmlspecialchars( )函数与htmlentities( )函数基本相同,它们的参数定义完全相同,只不过是htmlentities( )的转义更为彻底,通过$html['username']把username 输出到客户端,你就可以确保其中的特殊字符不会被浏览器所错误解释,如果username 只包含字母和数字的话,实际上转义是没有必要的,但是这体现了深度防范的原则,转义任何的输出是一个非常好的习惯,它可以戏剧性地提高你的软件的安全性.

另外一个常见的输出目标是数据库,如果可能的话,你需要对SQL 语句中的数据使用PHP内建函数进行转义,对于MySQL 用户,最好的转义函数是mysql_real_escape_string(),如果你使用的数据库没有PHP 内建转义函数可用的话,addslashes( )是最后的选择.

下面的例子说明了对于MySQL 数据库的正确的转义技巧:

  1. <?php 
  2. $mysql = array( ); 
  3. $mysql['username'] = mysql_real_escape_string($clean['username']); 
  4. $sql = "SELECT * 
  5. FROM profile 
  6. WHERE username = '{$mysql['username']}'"; 
  7. $result = mysql_query($sql); 
  8. ?> 

Tags: php安全 php处理技巧

分享到: