先看看下边这段PHP代码。这段使用ip2long函数,对同一个IP进行转换。当然,也有人认为58.99.011.1和058.99.011.1算不上合法的
IP,那就Return,此文对你没有帮助。
为什么要使用带前导零的ip:为了在数据库中查询,这个可以在IP库中定位到ip所对应的位置信息。虽然没有整型的IP查询效率高,但毕竟直观啊。
<?php
echo ip2long('58.99.11.1'),"<br/>"; //输出是 979569409
echo ip2long('58.99.011.1'),"<br/>"; //输出是 979568897
echo ip2long('058.99.11.1'),"<br/>"; //输出是空
?>
在PHP 4.x,5.x中, 有前导零的ip转换的结果都不正确。
解决办法,使用写自己的函数:
function myip2long($ip){
$ip_arr = split('\.',$ip);
$iplong = (16777216 * intval($ip_arr[0])) + (65536 * intval($ip_arr[1])) + (256 * intval($ip_arr[2])) + intval($ip_arr[3]);
return $iplong;
} ......
Apache
PHP
MySQL
按照通常的方法(可以在网上很容易搜索到)全部安装完成后,
1,修正httpd.conf
可按照网络上可搜索到的apache安装教程修改具体内容。这一步主要是配置apache本身的参数。
2,加入支持php5和mysql的代码到httpd.conf
LoadFile G:/server/php5/libmysql.dll
LoadModule php5_module G:/server/php5/php5apache2_2.dll
PHPIniDir "G:/server/php5"
AddType application/x-httpd-php .php
LoadFile行用来支持mysql,下边3行用来支持php5.2。具体路径自行修正。如果不需支持mysql,则loadfile行可以不加。
3,修正 php.ini (使用php.ini-dist 或者 php.ini-recommended 都行)
修改extension_dir = "G:\server\php5\ext" (用查找 extension_dir,路径改为你的php5的ext目录)
然后必须去掉;extension=php_gd2.dll 和;extension=php_mysql.dll 前的分号。如果不用mysql。则可以不删除php_mysql.dll 前的分号
【来自】:http://www.allwiki.com/wiki/Apache2.2_php5.2_mysql_%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95 ......
Php注入攻击是现今最流行的攻击方式,依靠它强大的灵活性吸引了广大黑迷。
在上一期的《php安全与注射专题》中林.linx主要讲述了php程序的各种漏洞,也讲到了php+mysql注入的问题,可是讲的注入的问题比较少,让我们感觉没有尽兴是吧.
OK,这一期我将给大家伙仔仔细细的吹一吹php+mysql注入,一定让你满载而归哦(谁扔砖头哩!)。
本文主要是为小菜们服务的,如果你已经是一只老鸟呢,可能某些东西会感觉比较乏味,但只要你仔细的看,你会发现很多有趣的东西哦。
阅读此文你只要明白下面的这点东西就够了。
1.明白php+mysql环境是如何搭建的,在光盘中我们收录搭建的相关文章,如果您对搭建php+mysql环境不是很清楚,请先查阅此文,在上一期的专题中也有所介绍。
2.大概了解php和apache的配置,主要用到php.ini和httpd.conf
而此文我们主要用到的是php.ini的配置。为了安全起见我们一般都打开php.ini里的安全模式,即让safe_mode = On,还有一个就是返回php执行错误的display_errors 这会返回很多有用的信息,所以我们应该关闭之,
即让display_errors=off 关闭错误显示后,php函数执行错误的信息将不会再显示给用户。
在php的配置文件php.ini中还 ......
之前一直都是在服务器调试程序,有一天想弄到本地来,可死活就是连不上远程服务器了。
本地:windows+apache。
远程服务器:windows+ms sql 2008.
php和apache该配置的都配了,其他程序也可以运行,可就是连不上数据库。
苦苦寻觅,终于找到答案:将本地system32下面的ntwdblib.dll替换成2000.80.194.0,一切ok。 ......
1、古老的欺骗SQL语句
在默认模式下,即使是你忘了把php.ini拷到/usr/local/lib/php.ini下,php还是打开magic_quotes_gpc=on。
这样所有从GET/POST/Cookie来的变量的单引号(')、双引号(")、反斜杠backslash(\)以及空字元NUL
(the null byte)都会被加上反斜杠,以使数据库能够正确查询。
但是在php-4-RC2的时候引入了一个配置文件php.ini-optimized,这个优化的php.ini却是
magic_quotes_gpc=off的。某些网管看到optimized字样也许就会把php.ini-optimized拷到
/usr/local/lib/php.ini,这时就比较危险。象比较简单的验证,假设没有过滤必要的字符:
select * from login where user='$HTTP_POST_VARS[user]' and pass='$HTTP_POST_VARS[pass]'
我们就可以在用户框和密码框输入1‘ or 1='1通过验证了。这是非常古董的方法了,这个语句会
替换成这样:
select * from login where user='1' or 1='1' and pass='1' or 1='1'
因为or 1='1'成立,所以通过了。
解决的办法最好就是过滤所有不必要的字符,还有就是推荐对于从GET/POST/Cookie来的并且用在SQL
中的变量加一个自定义的函数:
function gpc2sql($str) {
if(get_magic_quotes_gpc()==1)
return ......
对于脚本安全这个话题好像永远没完没了,如果你经常到国外的各种各样的bugtraq上,你会发现有一半以上都和脚本相关,诸如SQL
injection,XSS,Path Disclosure,Remote commands execution这样的字眼比比皆是,我们看了之后的用途难道仅仅是抓肉鸡?对于我们想做web安全的人来说,最好就是拿来学习
,可是万物抓根源,我们要的不是鱼而是渔。在国内,各种各样的php
程序1.0版,2.0版像雨后春笋一样的冒出来,可是,大家关注的都是一些著名的cms,论坛,blog程序,很少的人在对那些不出名的程序做安全检测,对于越来越多的php程序员和站长来说,除了依靠服务器
的堡垒设置外,php程序本身的安全多少你总得懂点吧。
有人说你们做php安全无非就是搞搞注入和跨站什么什么的,大错特错,如果这样的话,一个magic_quotes_gpc或者服务器里的一些安全设置
就让我们全没活路了:(。我今天要说的不是注入,不是跨站,而是存在于php程序中的一些安全细节问题。OK!切入正题。
注意一些函数
的
过滤有些函数在程序中是经常使用的,像
include(),require(),fopen(),fwrite(),readfile(),unlink(),eval()以及它们的变体函数
等等。这些函数都很实用,实用并不代表 ......