PHP中的代码安全和SQL Injection防范

在现在各种黑客横行的时候,如何实现自己php代码安全,保证程序和服务器的安全是一个很重要的问题,我随便看了下关于php安全的资料,并不是很多,至少比asp少多了,呵呵,于是就想写点东西,来防止这些可能出现的情况。这里没有太深的技术含量,我只是比较简单的谈了谈。(以下操作如无具体说明,都是基于PHP+MySQL+Apache的情况)先来说说安全问题,我们首先看一下两篇文章:
上面文章是安全焦点上的关于PHP安全的文章,基本上比较全面的介绍了关于PHP的一些安全问题。在PHP编码的时候,如果考虑到一些比较基本的安全问题,首先一点:1.
初始化你的变量为什么这么说呢?我们看下面的代码:if ($admin){ echo
”登陆成功!”; include(”admin.php”);}else{ echo
”你不是管理员,无法进行管理!”;}好,我们看上面的代码好像是能正常运行,没有问题,那么加入我提交一个非法的参数过去呢,那么效果会如何呢?比如我们的这个页是
,那么我们提交:,呵呵,你想一些,我们是不是直接就是管理员了,直接进行管理。当然,可能我们不会犯这么简单错的错误,那么一些很隐秘的错误也可能导致这个问题,比如最近暴出来的phpwind

1.3.6论坛有个漏洞,导致能够直接拿到管理员权限,就是因为有个$skin变量没有初始化,导致了后面一系列问题。那么我们如何避免上面的问题呢?首先,从php.ini入手,把php.ini里面的register_global

off,就是不是所有的注册变量为全局,那么就能避免了。但是,我们不是服务器管理员,只能从代码上改进了,那么我们如何改进上面的代码呢?我们改写如下:$admin
= 0; // 初始化变量if ($_POST[澳门新葡亰3522平台游戏,”admin_user”]
$_POST[”admin_pass”]){ //
判断提交的管理员用户名和密码是不是对的相应的处理代码 // … $admin =
1;}else{ $admin = 0;}if ($admin){ echo ”登陆成功!”;
include(”admin.php”);}else{ echo
”你不是管理员,无法进行管理!”;}那么这时候你再提交
就不好使了,因为我们在一开始就把变量初始化为 $admin = 0
了,那么你就无法通过这个漏洞获取管理员权限。2. 防止SQL Injection
(sql注射)SQL
注射应该是目前程序危害最大的了,包括最早从asp到php,基本上都是国内这两年流行的技术,基本原理就是通过对提交变量的不过滤形成注入点然后使恶意用户能够提交一些sql查询语句,导致重要数据被窃取、数据丢失或者损坏,或者被入侵到后台管理。基本原理我就不说了,我们看看下面两篇文章就很明白了:那么我们既然了解了基本的注射入侵的方式,那么我们如何去防范呢?这个就应该我们从代码去入手了。我们知道Web上提交数据有两种方式,一种是get、一种是post,那么很多常见的sql注射就是从get方式入手的,而且注射的语句里面一定是包含一些sql语句的,因为没有sql语句,那么如何进行,sql语句有四大句:select
、update、delete、insert,那么我们如果在我们提交的数据中进行过滤是不是能够避免这些问题呢