|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
用C语言重新编写,包括可以访问数据库。他将这些程序和一些表单直译器整合起来,称为 PHP/FI。PHP/FI 可以和数据库连接,产生简单的动态网页程序。 </p> 1、描写 intval函数有个特征:"直到赶上数字或正负符号才入手下手做转换,再碰到非数字或字符串停止时(\0)停止转换",在某些使用法式里因为对intval函数这个特征熟悉不敷,毛病的利用招致绕过一些平安判别招致平安破绽.
2、剖析
PHP_FUNCTION(intval)
{
zval **num, **arg_base;
int base;
switch (ZEND_NUM_ARGS()) {
case 1:
if (zend_get_parameters_ex(1, &num) == FAILURE) {
WRONG_PARAM_COUNT;
}
base = 10;
break;
case 2:
if (zend_get_parameters_ex(2, &num, &arg_base) == FAILURE) {
WRONG_PARAM_COUNT;
}
convert_to_long_ex(arg_base);
base = Z_LVAL_PP(arg_base);
break;
default:
WRONG_PARAM_COUNT;
}
RETVAL_ZVAL(*num, 1, 0);
convert_to_long_base(return_value, base);
}
Zend/zend_operators.c->>convert_to_long_base()
……
case IS_STRING:
strval = Z_STRVAL_P(op);
Z_LVAL_P(op) = strtol(strval, NULL, base);
STR_FREE(strval);
break;
当intval函数承受到字符串型参数是挪用convert_to_long_base()处置,接上去挪用Z_LVAL_P(op) = strtol(strval, NULL, base);经由过程strtol函数来处置参数。
函数原型以下:
long int strtol(const char *nptr,char **endptr,int base);
这个函数会将参数nptr字符串依据参数base来转换生长整型数,参数base局限从2至36,或0.参数base代表采取的进制体例,如base值为10则采取10进制,若base值为16则采取16进制等。
流程为:
strtol()会扫描参数nptr字符串,跳过后面的空格字符,直到赶上数字或正负符号才入手下手做转换,再碰到非数字或字符串停止时(\0)停止转换,并将了局前往。
那末当intval用在if等的判别外面,将会招致这个判别实去意义,从而招致平安破绽.
3、测试代码
//intval.php
$var="20070601";
if (intval($var))
echo "it's safe";
echo '$var='.$var;
echo "
";
$var1="1 union select 1,1,1 from admin";
if (intval($var1))
echo "it's safe too";
echo '$var1='.$var1;
4、实践使用
WordPress <= 2.0.6 wp-trackback.php Zend_Hash_Del_Key_Or_Index / sql injection exploit
编纂收拾整顿
在我开始学习PHP以前,我从未想过要做软件工程,即便是在去听过华育国际的关于软件工程的美好前景后,因为我一直都没有想过要与代码打交道,而是想学好所学专业,做个网络工程师或者是网络安全人员。 |
|