加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

浅谈PHP安详类型

发布时间:2018-10-13 08:45:06 所属栏目:业界 来源:littlepotato
导读:【新品产上线啦】51CTO播客,随时随地,碎片化进修 一、媒介 php因生成支持web应用的开拓,以其简朴易学,开拓服从高而备受喜欢。使其占有了大片的市

在这个例子中,是最low安详品级的php代码编写样例,可以看到,代码中并没有对用户输入的id变量举办搜查和过滤,同时行使的是$_REQUEST全局数组的方法,假如不是出格必要,我们编程的时辰只管不要行使$_REQUEST获取用户的参数,由于$_REQUEST的参数较量杂,包罗$_GET,$_POST,$_COOKIE等超全局变量,而且二者还存在变量获取次序的纷歧致,受设置文件中variables_order的约定,在存在waf的情形下,轻易造成绕过。未经处理赏罚的用户输入直接与sql语句拼接交互,造成sql注入裂痕,异常伤害。

(2) Medium level

  1. <?php 
  2.  
  3. if( isset( $_POST[ 'Submit' ] ) ) { // Get input $id = $_POST[ 'id' ]; $id = mysql_real_escape_string( $id ); 
  4.  
  5. // Check database  
  6. $query  = "SELECT first_name, last_name FROM users WHERE user_id = $id;";  
  7. $result = mysql_query( $query ) or die( '<pre>' . mysql_error() . '</pre>' );  
  8.  
  9. // Get results  
  10. $num = mysql_numrows( $result );  
  11. $i   = 0;  
  12. while( $i < $num ) {  
  13.     // Display values  
  14.     $first = mysql_result( $result, $i, "first_name" );  
  15.     $last  = mysql_result( $result, $i, "last_name" );  
  16.  
  17.     // Feedback for end user  
  18.     echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";  
  19.  
  20.     // Increase loop count  
  21.     $i++;  
  22. }  
  23.  
  24. //mysql_close(); 
  25.  
  26.  
  27. ?> 

这个版本的代码,与之前的对比只是多了个mysql_real_escape_string函数的过滤,可是要知道这里的$id在sql语句中是数字范例,这样mysql_real_escape_string的转义就会形同虚设,注入仍然是一马平川。虽然不适当的字符编码,也许会造成宽字节注入。

(3) High leval

  1. <?php  
  2.  
  3. if( isset( $_SESSION [ 'id' ] ) ) {  
  4.     // Get input  
  5.     $id = $_SESSION[ 'id' ];  
  6.  
  7.     // Check database  
  8.     $query  = "SELECT first_name, last_name FROM users WHERE user_id = '$id' LIMIT 1;";  
  9.     $result = mysql_query( $query ) or die( '<pre>Something went wrong.</pre>' );  
  10.  
  11.     // Get results  
  12.     $num = mysql_numrows( $result );  
  13.     $i   = 0;  
  14.     while( $i < $num ) {  
  15.         // Get values  
  16.         $first = mysql_result( $result, $i, "first_name" );  
  17.         $last  = mysql_result( $result, $i, "last_name" );  
  18.  
  19.         // Feedback for end user  
  20.         echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";  
  21.  
  22.         // Increase loop count  
  23.         $i++;  
  24.     }  
  25.  
  26.     mysql_close();  
  27. }  
  28.  
  29. ?> 

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读