Vào AdminCP > Plugins & Products > Plugin Manager, sau đó kéo xuống và tìm đến Plugin của mod Music Gift.
Sửa plugin có hook là ajax_start, thêm vào đoạn đầu phần Plugin PHP Code hàm sau (hàm này có tác dụng lọc input của câu lệnh SQL):
Tiếp theo bạn nhấn Ctrl+F và nhập từ khóa:
Chúng ta sẽ lọc input tại đây, tốt nhất nên copy toàn bộ PHP Code ra một trình biên soạn cho dễ nhìn (mình dùng Notepad++):
Code gốc khi chưa lọc input:
Chúng ta sửa thành như sau (sử dụng hàm Anti SQL ở trên để lọc input được người dùng nhập vào):
Các bạn Save lại và sửa tiếp Plugin có hook là misc_start, các bạn nhấn Ctrl+F và tìm dòng sau:
Thêm hàm addslashes để clean input:
Cuối cùng là Save.
Chúc các bạn thành công!
Tutorial by Juno_okyo - Juno_okyo's Blog.
Great thanks to Neods and James.
* Update: các bạn có thể dùng bộ lọc vBulletin đã có sẵn:
Hoặc:
PHP:
function anti_sql($sql) {$sql = str_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|*|--|\)/"),"",$sql);return trim(strip_tags(addslashes($sql))); #strtolower()}
PHP:
if($_POST['do'] == 'check_name')
Chúng ta sẽ lọc input tại đây, tốt nhất nên copy toàn bộ PHP Code ra một trình biên soạn cho dễ nhìn (mình dùng Notepad++):
Code gốc khi chưa lọc input:
PHP:
if($_POST['do'] == 'check_name') { $vbulletin->input->clean_array_gpc('p', array( 'name' => TYPE_STR) ); $u = explode(',',$_POST['name']); $found = ''; $lost = ''; foreach($u as $v) { $m = $vbulletin->db->query_first("SELECT * FROM ". TABLE_PREFIX ."user WHERE username = '".$v."'"); if($m[userid] > 0) {$q = $vbulletin->db->query_first("SELECT * FROM ". TABLE_PREFIX ."usergroup WHERE usergroupid = '".$m[usergroupid]."'"); $m[username] = $q[opentag].$m[username].$q[closetag]; $found = $found.$m[username].',';} else { $lost = $lost.$v.',';} } $answer = ''; if($found <> '') $answer = "Đã tìm được <b> ".$found."</b>. Hệ thống sẽ gửi tin nhắn đến bạn ấy để thông báo về món quà của bạn."; if($lost <> '') $answer = $answer."<br>Không tìm được <b><font color='red'>".$lost."</font></b> Nếu bạn gửi bài hát này đến tất cả mọi người, bạn không cần nhập tên chính xác."; echo $answer; }
PHP:
if($_POST['do'] == 'check_name') { $vbulletin->input->clean_array_gpc('p', array( 'name' => TYPE_STR) ); $_name = anti_sql($_POST['name']); // Clean Input $u = explode(',',$_name); $found = ''; $lost = ''; foreach($u as $v) { $m = $vbulletin->db->query_first("SELECT * FROM ". TABLE_PREFIX ."user WHERE username = '".$v."'"); if($m[userid] > 0) {$q = $vbulletin->db->query_first("SELECT * FROM ". TABLE_PREFIX ."usergroup WHERE usergroupid = '".$m[usergroupid]."'"); $m[username] = $q[opentag].$m[username].$q[closetag]; $found = $found.$m[username].',';} else { $lost = $lost.$v.',';} } $answer = ''; if($found <> '') $answer = "Đã tìm được <b> ".$found."</b>. Hệ thống sẽ gửi tin nhắn đến bạn ấy để thông báo về món quà của bạn."; if($lost <> '') $answer = $answer."<br>Không tìm được <b><font color='red'>".$lost."</font></b> Nếu bạn gửi bài hát này đến tất cả mọi người, bạn không cần nhập tên chính xác."; echo $answer; }
Các bạn Save lại và sửa tiếp Plugin có hook là misc_start, các bạn nhấn Ctrl+F và tìm dòng sau:
PHP:
$m = $vbulletin->db->query_first("SELECT * FROM ". TABLE_PREFIX ."hqth_music WHERE id = " . $_GET['id']) . ";");
PHP:
$m = $vbulletin->db->query_first("SELECT * FROM ". TABLE_PREFIX ."hqth_music WHERE id = '".addslashes($_GET['id'])."';");
Chúc các bạn thành công!
Tutorial by Juno_okyo - Juno_okyo's Blog.
Great thanks to Neods and James.
* Update: các bạn có thể dùng bộ lọc vBulletin đã có sẵn:
- $db->escape_string($input)
Hoặc:
- POST (Ví dụ $_POST['input_name']): $vbulletin->input->clean_gpc('p', 'input_name', TYPE_NOHTML)
- GET (Ví dụ: $_GET['input_name']): $vbulletin->input->clean_gpc('g', 'input_name', TYPE_NOHTML)