查看: 960|回复: 10
|
php的sessions
[复制链接]
|
|
sessions 的 var
如 $_SESSIONS 和 $HTTP_SESSIONS_VAR
其实需要去protect它的variable的吗?
如果要protect要怎么样
detect它被人尝试get variables或者改variables的,然后给它die();掉? |
|
|
|
|
|
|
|
发表于 8-12-2007 08:19 PM
|
显示全部楼层
1. input validation, 任何可以input data的地方,经常被忽略掉的就是http headers
2. 写自己的session handler 
[ 本帖最后由 megablue 于 8-12-2007 08:21 PM 编辑 ] |
|
|
|
|
|
|
|

楼主 |
发表于 8-12-2007 08:33 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 8-12-2007 11:23 PM
|
显示全部楼层
原帖由 wing_s 于 8-12-2007 08:33 PM 发表 
经常被忽略掉的就是http headers?
什么意思?
user submit的任何$_POST or $_GET,我先经过一个function 处理里面的内容了
把任何类似 $xxx的 以及那些system的var都filter掉,然后return error msg的 ... 注意injection,有很多种。 |
|
|
|
|
|
|
|
发表于 8-12-2007 11:57 PM
|
显示全部楼层
原帖由 wing_s 于 8-12-2007 08:12 PM 发表 
sessions 的 var
如 $_SESSIONS 和 $HTTP_SESSIONS_VAR
其实需要去protect它的variable的吗?
如果要protect要怎么样
detect它被人尝试get variables或者改variables的,然后给它die();掉?
session 是在server side 那边set 的
我很好奇你 你所说的 别人 尝试去 拿是怎么个做法 。。 |
|
|
|
|
|
|
|

楼主 |
发表于 9-12-2007 12:28 PM
|
显示全部楼层
回复 #5 tensaix2j 的帖子
就是比如在可以posting的地方放下那些如<?=$_SESSIONS?>之类的
我不知道可以做到没的。。。
就是怕可以 |
|
|
|
|
|
|
|

楼主 |
发表于 9-12-2007 12:29 PM
|
显示全部楼层
原帖由 vampcheah 于 8-12-2007 11:23 PM 发表 
注意injection,有很多种。
最普遍的有哪些?  |
|
|
|
|
|
|
|
发表于 10-12-2007 12:02 PM
|
显示全部楼层
原帖由 wing_s 于 9-12-2007 12:28 PM 发表 
就是比如在可以posting的地方放下那些如之类的
我不知道可以做到没的。。。
就是怕可以
php 我很少用。
不过以你这么说, 如果行的通的话
只要有input 的地方,user 都有可以key in php 代码,的说, 那就不仅是拿别人的session的问题了
那他也可以 key in 一个 infinite loop 例如 for(;;); 搞到你的server 团团转。。。?
要真是如此的话。。 那还是建议你把input 收拾干净 好了。。。 |
|
|
|
|
|
|
|
发表于 10-12-2007 12:18 PM
|
显示全部楼层
|
|
|
|
|
|
|
发表于 11-12-2007 02:03 AM
|
显示全部楼层
原帖由 tensaix2j 于 10-12-2007 12:02 PM 发表 
php 我很少用。
不过以你这么说, 如果行的通的话
只要有input 的地方,user 都有可以key in php 代码,的说, 那就不仅是拿别人的session的问题了
那他也可以 key in 一个 infinite loop 例如 ...
不会的, 除非你直接把没有验证的用户输入的资料丢进eval() / include() / require() / register global / magic quotes开了又没做好验证/初始化 (暂时只想到这5个)
eval()的例子
$user_input = "for( ; ; ) ;";
eval($user_input); //这样的话齐天大圣不来才怪,帮你的网站做72变都行.
使用eval()非常危险,在非必要的情况下可免则免。
include的例子
include($malicious_php_file_uploaded_by_monkey_king);
or
include($your_password_file); // "/path/to/your/password/file"
register global = on的例子(近期的php新版都经已把register global 默认值设定为 "关", 除非你手痒,不然问题应该不大)
...
//$login_success = false; //理应在没做任何执行前初始化
...
if(mysql_affected_rows($result))
{
//在错的地方初始化
$login_success = true;
}
if($login_success)
{
//show him the money!
}
...
在以上的代码当中因为$login_success没做初始化, 攻击者就可以在网址上传入函数
http://yoursite.com/treasure.php?login_sucess=1
magic quotes 的例子
$user_input= $_GET['post']; //没做验证, 加上magic quotes开启.
$sql = "INSERT INTO posts SET post = '$user_input'";
echo $sql;
// INSERT INTO posts SET post = 'the evil\'s tool - magic quotes'
看起来很方便的魔术引号
但是如果过于依赖魔术引号,造成的问题可大了. sql 注入之类的问题。 |
|
|
|
|
|
|
|
发表于 11-12-2007 08:58 AM
|
显示全部楼层
原帖由 megablue 于 11-12-2007 02:03 AM 发表 
但是如果过于依赖魔术引号,造成的问题可大了. sql 注入之类的问题。 这问题可大可小哦。 如果真的完全没有考虑过SQL injection, 我帮你网站洗database 都可以。 |
|
|
|
|
|
|
| |
本周最热论坛帖子
|