好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

三种危险的PHP代码

PHP是一个很强的语言,被称之为web开发之王,可以很轻易的搭建出一个很强悍的web应用程序。但是,往往有很多地方被我们疏漏掉了,下面几种不安全的 代码 ,你写过么?

不安全的全局变量,全局变量是个好东西,可以辅助我们做很多事情,$_SERVER中有很多有用的信息,我们可以直接拿过来用。不过如果你的代码里曾经出现过这样的代码:

if($authined==1) echo 'useful infomation!';

$authined是一个来处理授权的变量。然后你的php.ini中的register_globals是打开的。那么当你访问这样一个网址的时候:http://yoururl?authined=1,会出现什么情况呢?不管你之前的操作以后$authined的值是多少,他在浏览器的$_GET中设置了值1,所以该条件是成立的,那么将输出一些你本来需要$authined为1的时候才输出的信息。这样你的一些验证就白搭了。所以当应用完成以后,最好还是把register_globals关闭。

错误提示的双刃剑错误提示也是个好东西,在程序的开发阶段,我们可以根据他来得到我们的程序哪里错了,进而分析程序,来改进我们的程序。但是,当我们的程序已经发布了以后,这些错误提示再弹出来,就很难保证,他不被一些人利用。从错误信息中可以得到很多信息。比如服务器的操作系统,数据库类型版本,应用程序服务器类型等等一系列的信息。而这一些东西,对于安全都是不利的。所以,当程序发布以后,请关闭你的错误提示。并且将显示错误的地方设置为不显示。同时如果你用的PHP框架需要设置发布级别,请不要设置程debug级别。 SQL注入攻击。很多人应该写过这样的注册的登录系统,而且自己认为这样的系统安全还不错。就是页面中有两个文本框,一个输入用户名一个用来输入密码。然后,验证语句是这么写的。

$check = mysql_query("Select Username, Password, UserLevel FROM Users Where Username = '".$_POST['username']."' and Password = '".$_POST['password']."'");

这样的语句,正常输入当然没有问题,但是当我们在用户名文本框中输入如下的东西时候,or 1=1 # 时,组合出来的sql语句就会变成。

"Select Username, Password, UserLevel FROM Users Where Username ='1' or 1=1 #' and Password='xxx'

这样的sql语句,#后边的会被认为是注释,而1=1是永远成立的,所以选择的条件永远为true,这样将选出所有的用户信息。当我们根据用户的个数判断用户名密码是否正确的时候,也就发生了不该发生的错误了。

以上几点错误信息,每一点如果犯了都是致命的,希望各位写过的没写过注意一下。否则,假如某一天起来,自己的网站被hack掉了就不好玩了。

查看更多关于三种危险的PHP代码的详细内容...

  阅读:39次