安全专家:让你的PHP更安全

王朝php·作者佚名  2008-05-19
窄屏简体版  字體: |||超大  

很多朋友都在使用PHP开发Web应用程序,程序虽然写了很多,但是安全问题却考虑得非常少,这可不是好现象。下面我们就一起来讨论PHP的安全问题,希望大家都能写出安全性很高的程序!

页面变量

如果只用几个页面来做一个站点的话,大家都希望用相同的页眉和页脚,而程序员常常是用一个索引来做输出页眉,再用同样的方法输出页脚。

有的站点为了选择页面的内容,用定义在URL中的页面变量。如下:

这是个普通的错误:当PHP包括一个页面时,它不能考虑这个页面是本地的还是远程服务器上的。攻击者可以容易地变URL为:

这样将促使PHP从远程服务器上下载crack.php,并在本地服务器上执行!简单来说,就会将/etc/passwd文件暴露给攻击者。

SQL&URL安全

SQL注入是现在非常时髦的攻击方法了,我们来看看这样的攻击方法是怎么造成的:假如有个URL是"http://www.unsecuresite.com/index.php?id=3",我们假设ID变量被用在SQL中,当出现错误时,有些开发者喜欢输出SQL命令。如果要把'加入到URL中就可能出现错误。如下:

"Error:SELECT*FROM Mytable WHERE ID='3'"

在这里面我们看到被指定在URL中ID变量直接用在了SQL命令中,如果我们把URL.变成http://www.unsecuresite.corn/index,php?id=3'%20OR%20id='0(%20是一个空格),应用程序将运行SQL命令:

"SELECT*FROM Mytable WHERE ID='3' OR ID='0'"

一个初步的注人就形成了!

为了避免这些,必须常常检查用在URL中的变量。例如,可以这样:

SQL注册页面问题

在站点上用用户登录,必须注意我们的SQL。假设有一个注册页面如下:

我们假定$Username和$Password被用在一个SQL命令中。如下:

应用程序将检查SQL命令是否返回记录并记录它。

很多站点有成千上万的用户。假如我们在用户名一栏里写'admin';--",在密码那一栏里写一些无用的东西,SQL命令将执行如下:

在这个例子中,数据库将不能检查密码也不能返回一个有效用户名的记录。

避免这些可以通过检查---和'在用户名里的并且不理这些请求。最好的办法就是避开这些字符串,像对待其他字符一样对待---和,。

好了,常见的几个PHP的注意事项就说完了,其实网络的Web服务器是非常容易暴露给攻击者的,假如PHP代码到处是漏洞的话,就是有再好的防火墙也是没用的。所以,希望大家在编写程序的时候能够真正重视PHP的安全问题!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航