初始化变量用的(无论何时用变量都要考虑初始化,要不然安全性不值得一提,一个get就完了)
今天看到这么一句化
不理解一个get就完了 请高手指教
第1个回答 推荐于2016-10-10
是这样的,比如我们程序要使用$tmp来存储一个循环里面取到的内容,语句如下:
while(...){
if (...) $tmp=...;
}
if ($tmp==...) {...}
上面的语句,是在循环里面判断某个条件,条件满足就赋值,循环结束后判断变量的值来执行程序,看起来没问题,但是实际上有问题。
因为在循环前没有对$tmp='';这样初始化,那么循环中如果一直都没有满足条件,其实$tmp的值可能是不确定的。特别是,当字段全局变量开关打开的时候,$tmp的值可能是调用这个PHP文件时的参数值,例如xxx.php?tmp=xxx这样的调用就可以改变程序里面变量的值,非常危险。本回答被提问者采纳
while(...){
if (...) $tmp=...;
}
if ($tmp==...) {...}
上面的语句,是在循环里面判断某个条件,条件满足就赋值,循环结束后判断变量的值来执行程序,看起来没问题,但是实际上有问题。
因为在循环前没有对$tmp='';这样初始化,那么循环中如果一直都没有满足条件,其实$tmp的值可能是不确定的。特别是,当字段全局变量开关打开的时候,$tmp的值可能是调用这个PHP文件时的参数值,例如xxx.php?tmp=xxx这样的调用就可以改变程序里面变量的值,非常危险。本回答被提问者采纳
第2个回答 2009-04-14
安全性的问题一定要时刻记在心里!!
PHP常见的一个安全问题就是register_globals
在php.ini里如果register_globals = On被打开
就默认设置GPCS对应的变量,G:$_GET,P: $_POST, C:$_COOKIE, S: $_SESSION.
例如,有一个连接a.php?a=1&b=2
$_GET就是array('a'=>1, 'b'=>2)
系统自动生成以下变量:
$a = 1;
$b = 2;
GPCS里的都会被生成。
这样虽然方便了,但是会带来安全隐患,外人可以控制你的变量!!
例如你有一个变量是判断是否登录的,假设$logined,
我访问这个链接$a.php?logined=1
你的$logined就自动设置为1了,你就登陆了!!
是不是很危险呢?
如果我们在用到前些一句 $logined=0;就不会出现问题了。
这就是你所说的 一个get就完了
PHP常见的一个安全问题就是register_globals
在php.ini里如果register_globals = On被打开
就默认设置GPCS对应的变量,G:$_GET,P: $_POST, C:$_COOKIE, S: $_SESSION.
例如,有一个连接a.php?a=1&b=2
$_GET就是array('a'=>1, 'b'=>2)
系统自动生成以下变量:
$a = 1;
$b = 2;
GPCS里的都会被生成。
这样虽然方便了,但是会带来安全隐患,外人可以控制你的变量!!
例如你有一个变量是判断是否登录的,假设$logined,
我访问这个链接$a.php?logined=1
你的$logined就自动设置为1了,你就登陆了!!
是不是很危险呢?
如果我们在用到前些一句 $logined=0;就不会出现问题了。
这就是你所说的 一个get就完了