|
|
|
มีวิธี hack แบบนี้ด้วยเหรอครับ แล้วจะมีวิธีป้องกันบ้างหรือเปล่า ไม่รู้จริงๆ |
|
|
|
|
|
|
|
พอจะรู้สาเหตุบ้างแล้วครับผู้รู้ท่านไหนมีวิธีป้องกันยังไงช่วยแนะนำหน่อยครับ
|
|
|
|
|
Date :
2009-10-30 13:37:57 |
By :
domeawji |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อ้าว แล้ว username กับ password ของคุณคือรัยอะครับ
ถ้า username คือ admin มันก็ไม่น่าเดายากนะครับ คงไม่น่าเกี่ยวกับการ hack
|
|
|
|
|
Date :
2009-10-30 13:43:28 |
By :
Sek-Artdrinker |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แบบนี้เขาเรียกว่า Mysql Injection hack ครับ
|
|
|
|
|
Date :
2009-10-30 13:59:37 |
By :
deawx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
โห ไปคุยงานแป๊บเดียว ตอบกันเพียบ
|
|
|
|
|
Date :
2009-10-30 14:01:44 |
By :
plakrim |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
แล้วเข้าได้ยังไงครับ งง เหมือนกัน
ยังไม่ค่อยเข้าใจ รบกวน ขยายความทีครับ อ่าน ตามลิ้งค์แล้วยังงง อยู่ครับ
|
|
|
|
|
Date :
2009-10-30 14:12:32 |
By :
tingtongkub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
md5() ช่วยตรง password ก็กันได้นะครับ
ตย.
$password = md5($_POST['password']);
จะใส่อะไรมามันก็ md5 จนเละตุ้มเป๊ะอ่านไม่รู้เรื่อง จากนั้นก็เอาไปเทียบกับ password ที่ถูก md5 ไว้แล้วได้เลย
$sql = "select * from users where username = '$username' and password = '$password'";
วิธีนี้จะใส่ or หรือสารพัดอะไรมามันก็เอามา md5() ก่อนเลย ผลคือพวกตัวพิมพ์ต่างๆจะกลายเป็นตัวเลขและตัวอักษรเล็กใหญ่ต่างๆนาๆ ปิดทางป้องกันได้อย่างดี
แต่ก็จะเหลือตรง username ที่ยังเป็นช่องโหว่ได้อยู่..
ถ้าใช้ ADOdb class มันก็ช่วยป้องกันปัญหาตรงนี้ได้อีกรอบ (ลองมาแล้วแฮคไม่ได้ผล)
|
|
|
|
|
Date :
2009-10-30 15:01:31 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มันจะดึง record แรก
วิธีแก้ก็ตามเพือนๆ ของบน
เพิ่มเติมนะ
คำสั่ง SQL
ให้เพิ่มว่า ORDER BY user_id DESC เวลาล็อกอิน ก็จะเข้ามตาม user_id หลังสุด
ฟวังว่า คงไม่ไช่ admin อะนะ
|
|
|
|
|
Date :
2009-10-30 15:04:23 |
By :
danya |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
select * from tbl_name where user='admin' or 1; อืม สมเหตุสมผลดี
แอบลอง login กับบอร์ดนี้ดู เข้าไม่ได้แห่ะ อิอิ
ผมใช้การ select * from tbl_name เลือกทั้งหมดก่อนแล้วมาวนลูปหาทีหลัง แง่บๆ
Code (PHP)
$sql =mysql_query("select * from tbl_name");
while($rs=mysql_fetch_array($sql)){
if($_POST[user]==$rs[user] && $_POST[password]==$rs[password]){
echo "<meta http-equiv=\"refresh\" content=\"0; url=next.php\">";
return;
}
}
เดียวลองเปลี่ยนมาใช้ mysql_real_escape_string() บ้างแหล่ะ คงดีกว่าเยอะ
|
|
|
|
|
Date :
2009-10-30 15:04:30 |
By :
xbeginner01 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ADOdb เอาไม่อยู่แฮะ - -" เจอ ' or '' = ' เข้าไปเล่นเอาทะลุโบ๋เลย
ถามนิดคับ
ถ้าหากการเรียกดูตารางทั่วไปที่อ้างอิง id เช่น เรียกดูตารางสินค้าโดยอิงจาก product_id มันจะทะลวงได้มั้ยนะ?
$sql = "select * from products where product_id = ".$_GET['id']." ";
เกิดมีคนเล่นคำสั่ง delete หรือลบทั้งหมด มันจะทะลวงได้มั้ยครับ?
|
|
|
|
|
Date :
2009-10-30 15:18:57 |
By :
mr.v |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#12
ทำแบบนั้น ถ้ามี 10,000 user ก็ตายกันพอดีครับ ฮาๆ
|
|
|
|
|
Date :
2009-10-30 15:29:55 |
By :
danya |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
adodb class มีตัวช่วยสร้าง query ที่ escape ให้โดยไม่ต้องใช้ mysql_real_escape_string ครับ
<?php
include('adodb5/adodb.inc.php');
$driver = 'mysql';
$server = 'localhost';
$user = 'root';
$password = '12345';
$database = 'ddd';
if (1){
$id = " 'sdfsdf' ";
}else{
$id = 1;
}
$db = ADONewConnection($driver);
$db->debug = true;
$db->Connect($server, $user, $password, $database);
$rs = $db->Execute('SET NAMES UTF8');
//ไม่ใช้ตัวแปรโดยตรงใน query แต่จะใช้ตัวแปรส่งไปทาง array นำไปแทนที่ ?
$rs = $db->Execute('select * from tb WHERE id=?',array($id));
print "<pre>";
print_r($rs->GetRows());
print "</pre>";
?>
ดูที่ debug query มีการ escape ให้เรียบร้อยครับ
(mysql): select * from tb WHERE id=' \'sdfsdf\' '
|
|
|
|
|
Date :
2009-10-30 16:14:56 |
By :
num |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|