3.1.2 - 致命 - 未处理
配置:'URL_MODEL' => 3
代码:
dump(U('User/login', 'referer=' . $_SERVER['REQUEST_URI']));
dump(U('User/login', 'referer=' . urlencode($_SERVER['REQUEST_URI'])));
dump(U('User/login', array('referer' => $_SERVER['REQUEST_URI'])));
dump(U('User/login', array('referer' => urlencode($_SERVER['REQUEST_URI']))));
结果:
string(69) "/sdk_web4/www/index.php?s=/User/login/referer//sdk_web4/www/index.php"
string(69) "/sdk_web4/www/index.php?s=/User/login/referer//sdk_web4/www/index.php"
string(69) "/sdk_web4/www/index.php?s=/User/login/referer//sdk_web4/www/index.php"
string(75) "/sdk_web4/www/index.php?s=/User/login/referer/%2Fsdk_web4%2Fwww%2Findex.php"
第二个结果肯定是错的。
第三个和第四个的结果不是预期的,用数组的方式传递参数的话应该给参数的值自动加上urlencode
在 /sdk_web4/www/index.php?s=/User/login/referer/%2Fsdk_web4%2Fwww%2Findex.php 中:
dump($_GET);
结果:
array(2) {
["sdk_web4"] => string(3) "www"
["_URL_"] => array(7) {
[0] => string(4) "User"
[1] => string(5) "login"
[2] => string(7) "referer"
[3] => string(0) ""
[4] => string(8) "sdk_web4"
[5] => string(3) "www"
[6] => string(5) "index"
}
}
_URL_中的referer之后是不是错了呢?
当我把referer参数再encode一边后:
/index.php?s=/User/login/referer/%252Fsdk_web4%252Fwww%252Findex.php
结果:
array(2) {
["referer"] => string(25) "%2Fsdk_web4%2Fwww%2Findex"
["_URL_"] => array(4) {
[0] => string(4) "User"
[1] => string(5) "login"
[2] => string(7) "referer"
[3] => string(25) "%2Fsdk_web4%2Fwww%2Findex"
}
}
这应该是很明显的多decode了一次嘛。
求解释
求解决
求真相
谢谢!
