09/10/2018, 22:49

Ý tưởng nhỏ xíu về vấn đề fake leader group... (IBF)

Em có 1 ý tưởng như sau,khi ta muốn che dấu group Admin thực sự của diễn đàn ( IBF ),ta có thể để hiển thị trùng với member nhưng quyền root admin.

Sau đó tạo 1 group mới với "display" là Admin,từ màu mè,icon cho đến rank và ...trong hiển thị leader.

Hiện tại,em đang bí phần này.

Khi xem danh sách quản trị của 1 forum IBF,ta sẽ có act=leaders.

Đây là code của phần cần chỉnh sửa.

Code:
/*-------------------------------------------------------------------------*/
// SHOW FORUM LEADERS
/*-------------------------------------------------------------------------*/

function show_leaders()
{
//-----------------------------------------
// Work out where our super mods / admins/ mods
// are.....
//-----------------------------------------

$group_ids = array();
$member_ids = array();
$used_ids = array();
$members = array();
$moderators = array();

foreach( $this->ipsclass->cache['group_cache'] as $d => $i )
{
if ( $i['g_is_supmod'] )
{
$group_ids[ $i['g_id'] ] = $i['g_id'];
}

if ( $i['g_access_cp'] )
{
$group_ids[ $i['g_id'] ] = $i['g_id'];
}
}

foreach( $this->ipsclass->cache['moderators'] as $d => $i )
{
if ( $i['is_group'] )
{
$group_ids[ $i['group_id'] ] = $i['group_id'];
}
else
{
$member_ids[ $i['member_id'] ] = $i['member_id'];
}
}

//-----------------------------------------
// Get all members.. (two is more eff. than 1)
//-----------------------------------------

if ( count( $member_ids ) )
{
$this->ipsclass->DB->cache_add_query( 'stats_get_all_members', array( 'member_ids' => $member_ids ) );
$this->ipsclass->DB->cache_exec_query();

while( $r = $this->ipsclass->DB->fetch_row() )
{
$members[ $r['id'] ] = $r;
}
}

//-----------------------------------------
// Get all groups.. (two is more eff. than 1)
//-----------------------------------------

$this->ipsclass->DB->cache_add_query( 'stats_get_all_members_groups', array( 'group_ids' => $group_ids ) );
$this->ipsclass->DB->cache_exec_query();

while( $r = $this->ipsclass->DB->fetch_row() )
{
$members[ $r['id'] ] = $r;
}

//-----------------------------------------
// PRINT: Admins
//-----------------------------------------

$this->output .= $this->ipsclass->compiled_templates['skin_stats']->group_strip( $this->ipsclass->lang['leader_admins'] );

foreach( $members as $id => $member )
{
if ( $this->ipsclass->cache['group_cache'][ $member['mgroup'] ]['g_access_cp'] )
{
$this->output .= $this->ipsclass->compiled_templates['skin_stats']->leader_row( $this->parse_member( $member ), $this->ipsclass->lang['leader_all_forums'] );

//-----------------------------------------
// Used...
//-----------------------------------------

$used_ids[] = $id;
}
}

$this->output .= $this->ipsclass->compiled_templates['skin_stats']->close_strip();

//-----------------------------------------
// PRINT: Super Moderators
//-----------------------------------------

$tmp_html = "";

foreach( $members as $id => $member )
{
if ( $this->ipsclass->cache['group_cache'][ $member['mgroup'] ]['g_is_supmod'] and ( ! in_array( $id, $used_ids) ) )
{
$tmp_html .= $this->ipsclass->compiled_templates['skin_stats']->leader_row( $this->parse_member( $member ), $this->ipsclass->lang['leader_all_forums'] );

//-----------------------------------------
// Used...
//-----------------------------------------

$used_ids[] = $id;
}
}

if ( $tmp_html )
{
$this->output .= $this->ipsclass->compiled_templates['skin_stats']->group_strip( $this->ipsclass->lang['leader_global'] );
$this->output .= $tmp_html;
$this->output .= $this->ipsclass->compiled_templates['skin_stats']->close_strip();
}

//-----------------------------------------
// GET MODERATORS: Normal
//-----------------------------------------

$tmp_html = "";

foreach( $members as $id => $member )
{
if ( ! in_array( $id, $used_ids) ) 
{
foreach( $this->ipsclass->cache['moderators'] as $idx => $data )
{
if ( $data['is_group'] and $data['group_id'] == $member['mgroup'] )
{
if ( $this->ipsclass->check_perms( $this->ipsclass->forums->forum_by_id[ $data['forum_id'] ]['read_perms'] ) == TRUE )
{
$moderators[] = array_merge( $member, array( 'forum_id' => $data['forum_id'] ) );
}

$used_ids[] = $id;
}
else if ( $data['member_id'] == $member['id'] )
{
if ( $this->ipsclass->check_perms( $this->ipsclass->forums->forum_by_id[ $data['forum_id'] ]['read_perms'] ) == TRUE )
{
$moderators[] = array_merge( $member, array( 'forum_id' => $data['forum_id'] ) );
}

$used_ids[] = $id;
}
}
}
}

//-----------------------------------------
// Parse moderators
//-----------------------------------------

if ( count($moderators) > 0 )
{
$mod_array = array();

$this->output .= $this->ipsclass->compiled_templates['skin_stats']->group_strip( $this->ipsclass->lang['leader_mods'] );

foreach ( $moderators as $idx => $i )
{
if ( ! isset( $mod_array['member'][ $i['id'] ][ 'name' ] ) )
{
//-----------------------------------------
// Member is not already set, lets add the member...
//-----------------------------------------

$mod_array['member'][ $i['id'] ] = array( 'members_display_name' => $i['members_display_name'],
'email' => $i['email'],
'hide_email' => $i['hide_email'],
'location' => $i['location'],
'aim_name' => $i['aim_name'],
'icq_number' => $i['icq_number'],
'id' => $i['id']
);

}

//-----------------------------------------
// Add forum.. 
//-----------------------------------------

$mod_array['forums'][ $i['id'] ][] = array( $i['forum_id'] , $this->ipsclass->forums->forum_by_id[ $i['forum_id'] ]['name'] );
}

foreach( $mod_array['member'] as $id => $data )
{
$fhtml = "";

if ( count( $mod_array['forums'][ $id ] ) > 1 )
{
$cnt = count( $mod_array['forums'][ $id ] );
$fhtml = $this->ipsclass->compiled_templates['skin_stats']->leader_row_forum_start($id, sprintf( $this->ipsclass->lang['no_forums'], $cnt ) );

foreach( $mod_array['forums'][ $id ] as $idx => $data )
{
$fhtml .= $this->ipsclass->compiled_templates['skin_stats']->leader_row_forum_entry($data[0],$data[1]);
}

$fhtml .= $this->ipsclass->compiled_templates['skin_stats']->leader_row_forum_end();
}
else
{
$fhtml = "<a href='{$this->ipsclass->base_url}showforum=".$mod_array['forums'][ $id ][0][0]."'>".$mod_array['forums'][ $id ][0][1]."</a>";
}


$this->output .= $this->ipsclass->compiled_templates['skin_stats']->leader_row( 
$this->parse_member( $mod_array['member'][ $id ] ),
$fhtml
);
}

$this->output .= $this->ipsclass->compiled_templates['skin_stats']->close_strip();

}

$this->page_title = $this->ipsclass->lang['forum_leaders'];
$this->nav = array( $this->ipsclass->lang['forum_leaders'] );
}
Về ý tưởng,khi 1 người muốn xem ban quản trị của diễn đàn gồm những ai,ai là Admin ==> thường vào act=leaders để tìm kiếm.

Hiện tại,nó đang show ra đúng group Admin thực sự chứ ko phải group Admin fake.

Theo như vốn hiểu biết ít ỏi của em thì nó nằm phần lớn ở đoạn này

Code:
//-----------------------------------------
// PRINT: Admins
//-----------------------------------------

$this->output .= $this->ipsclass->compiled_templates['skin_stats']->group_strip( $this->ipsclass->lang['leader_admins'] );

foreach( $members as $id => $member )
{
if ( $this->ipsclass->cache['group_cache'][ $member['mgroup'] ]['g_access_cp'] )
{
$this->output .= $this->ipsclass->compiled_templates['skin_stats']->leader_row( $this->parse_member( $member ), $this->ipsclass->lang['leader_all_forums'] );

//-----------------------------------------
// Used...
//-----------------------------------------

$used_ids[] = $id;
}
}

$this->output .= $this->ipsclass->compiled_templates['skin_stats']->close_strip();
Em muốn thay vì nó chuyền tham số để gọi đến ID của Group Admin Root,đoạn code này sẽ bị ép để gọi đến ID của Group Admin Fake ..

Tức là khi vào act=leaders,nó sẽ ko hiển thị ra Admin thực sự của site mà hiển thị ra Admin "ảo" ..Đây có thể là 1 member nào đó,nhưng bề ngoài sẽ là Admin ...dẫu có cố gắng để lấy được pass của member này thì cũng...bó tay,ko làm gì được.

Ngoài ra,em sẽ hidden group Admin thực sự đi,và nếu cần thiết có thể chuyển ID của group đó.

Vấn đề này có thực hiện được ko hả các bác ?
Thay vì kiểm tra ID Group Admin,tìm kiếm trong database rồi xuất ra các thành viên trong ID Group tương ứng,ta đưa thẳng đến 1 ID Group đã được định nghĩa sẵn và xuất ra các thông tin thành viên từ ID Group đó.

Các bác hiểu ý em chứ ?

Liệu bác nào có thể giúp em hiện thực hóa ý tưởng "dở hơi" này ko nhỉ ?

Code:
$used_ids[] = $id;
==> Biến ID này sẽ lấy ở đâu ra ??? Có thể sử dụng trực tiếp nó được ko ?

Và cái nì nữa

Code:
foreach( $members as $id => $member )
nohack viết 01:00 ngày 10/10/2018
Không có ai thấy em nói gì sao ....
mIn hEe viết 00:55 ngày 10/10/2018
Ý tưởng hay quá mà mình kém nên ko giúp đc, đành ngồi xem các bác cao thủ ra tay.
nohack viết 00:54 ngày 10/10/2018
To mIn_HEe : Em "xi măng" nè bác ( PDP )
To lkn : Cảm ơn bác đã hướng dẫn,nhưng mà làm thế nào để gọi ra đúng ID của group fake hả bác ?

Ở trên bác chỉ nói nếu member_group khác id của admin thì sẽ chạy thằng ku "fake code" ...,nếu ko thì làm như bình thường...

Và bỏ đoạn này

Code:
$this->output .= $this->ipsclass->compiled_templates['skin_stats']->group_strip( $this->ipsclass->lang['leader_admins'] );

foreach( $members as $id => $member )
Tức là sao bác nhể ? Đoạn code này là lấy ra từ file stats.php trong source/..../misc/

Có thể thay luôn là "Nếu member group = ID của group fake" thì show ra thông số về member thuộc group đó ko ạ ?

Chờ tin bác...

( Em đã thử truyền trực tiếp vào nhưng ..đáng tiếc là ko được .. )
nohack viết 00:54 ngày 10/10/2018
Giả sử như em ko muốn random mà chỉ định luôn chính xác id của group đó thì sao bác nhờ ? Dạo này forum của em bị nhìu cha nội téng quá ..tự nhiên nghĩ ra cái trò mèo này
Bài liên quan
0