SlideShare ist ein Scribd-Unternehmen logo
1 von 3
k thu t t n công SQL Injection và cáchỹ ậ ấ
phòng ch ng trong phpố
AUTHOR: THEHALFHEART PUBLIC DATE: 14/08/2014 CATEGORY: PHP VIEWS: 511
bài tr c chúng ta ã c tìm hi u cáchƠ ướ đ đượ ể phòng ch ng CSRFố , v y thì trong bài này ta s tìmậ ẽ
hi u thêm m t k thu t khác c ng r t hay s d ng t n công vào nh ngể ộ ỹ ậ ũ ấ ử ụ để ấ ữ website c a nh ng tayủ ữ
ngh thi u kinh nghi m l p trình, ó làề ế ệ ậ đ k thu t t n công SQL Injectionỹ ậ ấ .
1. SQL Injection là gì?
SQL Injection là m t k thu t l i d ng nh ng l h ng v câu truy v n l y d li u c a nh ngộ ỹ ậ ợ ụ ữ ỗ ổ ề ấ ấ ữ ệ ủ ữ
website không an toàn trên web, âylà m t k thu t t n công r t ph bi n và s thành công c ađ ộ ỹ ậ ấ ấ ổ ế ự ủ
nó c ng t ng i cao. Tuy nhiên vào nh ng n m tr l i âythì xu t hi n nhi u Framwork nênnóũ ươ đố ữ ă ở ạ đ ấ ệ ề
gi m h n, vì cácFW ãh tr r t t t vi c ch ng l iả ẳ đ ỗ ợ ấ ố ệ ố ạ hack SQL Injection này.
Ch c h n các b n ã bi t mô hình ho t ng c a website r i nh ? Khi m t request c g i tắ ẳ ạ đ ế ạ độ ủ ồ ỉ ộ đượ ử ừ
client thì ngôn ng SERVER nh PHP s l y các thông tin t request ó. Nh ng b n thân nóữ ư ẽ ấ ừ đ ư ả
không h phát hi n ra nh ng thông tin ó có ch a nh ng câuSQL c, vì th công vi c này taề ệ ữ đ ứ ữ độ ế ệ
ph i trách nhi mả đổ ệ t i kinh nghi m c a l p trình viên.ớ ệ ủ ậ
Ví d :ụ Gi s tôi có m t trang ng nh p v i hai thông tin làả ử ộ đă ậ ớ tên ng nh pđă ậ và m t kh uậ ẩ .
Và o n code x lý t n công sql injectionđ ạ ử ấ c a tôi có d ng nh sau:ủ ạ ư
1
2
3
4
$username = $_POST['username'];
$password = $_POST['password'];
$sql = "select count(*) from user where username = '$username' AND password = '$pa
Tr ng h p 1:ườ ợ Bâygi tôi nh pờ ậ username = thehalfheart và password = matkhau thì câutruy
v n s là:ấ ẽ
select count(*) from user where username = 'thehalfheart AND password = 'matkhau'
Tr ng h p 2: Bây gi tôi nh pườ ợ ờ ậ username = somename và password = something' OR '1. Như
v y câusql s là:ậ ẽ
SELECT * FROM cms_user WHERE user_username = 'thehalfheart' AND user_password =
'something' OR '1'
Ch y câutruy v n này lênthì k t qu nó tr v là danh sách user nênn u code cùicùi thì login cạ ấ ế ả ả ề ế đượ
luôn.
Trên âylà m t ví d i n hình thôi, ch th c t thì hacker còn r t nhi u m u m o khác. Tuy nhiênđ ộ ụ đ ể ứ ự ế ấ ề ư ẹ
chung quy l i v i k thu t t n công SQL Injection ta v n có th không ch c nó.ạ ớ ỹ ậ ấ ẫ ể ế đượ
2. Phòng ch ng SQL Injectionố
V i kinh nghi m c a mình thì th t s ch a phântích sâuvào k thu t này, tuy nhiênmình c ng bi tớ ệ ủ ậ ự ư ỹ ậ ũ ế
chút ít kinh nghi m có th ch ng l i k thu t này.ệ để ể ố ạ ỹ ậ
2.1. Nh n d li u ki u INTậ ữ ệ ể
Khi b n nh n d li u ID trênURL thì cách t t nh t b n nênạ ậ ữ ệ ố ấ ạ ép ki uể , chuy n nó v ki u s INT, sauể ề ể ố
ó chuy n v ki u STRING (n u c n thi t).đ ể ề ể ế ầ ế
Ví d : tôi có url nh sau: domain.com/detail.php?id=12ụ ư
1 $id = isset($_GET['id']) ? (string)(int)$_GET['id'] : false;
Nh v y thì cho dù ta nh p vào k t gì i n a u s b clear ra kh i h t. Ho c ta có th dùngư ậ ậ ỳ ự đ ữ đề ẽ ị ỏ ế ặ ể
cách d c b ng cách dùngướ ằ hàm preg_replace trong PHP xóa i nh ng ký t không ph i là chđể đ ữ ự ả ữ
s .ố
1
2
$id = isset($_GET['id']) ? $_GET['id'] : false;
$id = str_replace('/[^0-9]/', '', $id);
R t n gi n, tuy nhiênmình khuy n khích nêndùng ép ki u trong PHP, vì nó n gi n.ấ đơ ả ế ể đơ ả
2.2 Vi t l i ng d n có thế ạ đườ ẫ ể ch ng SQL Injectionố
V n này có v h i l nh ng b n thânmình th y r t úng. Khi b n vi t l i ng d n dùtrên hấ đề ẻ ơ ạ ư ả ấ ấ đ ạ ế ạ đườ ẫ ệ
th ng route c aố ủ FW hay dù trên file .htaccess thì hãy fix chính xác o n mã Regular Expressionđ ạ
(Tham kh oả Regular Expression c n b nă ả ).
Ví d :ụ Tôi có ng d n sau khi rewirte là nh sau: domain.com/hoc-lap-trinh-mien-phi-tai-đườ ẫ ư
freetuts.html thì o n Regex tôi s vi t là:đ ạ ẽ ế
/([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).html/ . Thay vì nh v y thì tôi s vi t chính xácư ậ ẽ ế /([a-
zA-Z0-9-]+)/([0-9]).html/ thì s t t h n. Và ng quên là c ng n i ng link g c c a nóẽ ố ơ đừ ũ ẩ đ đườ ố ủ
nhé.
2.3 S d ng hàm sprintf vàử ụ
mysql_real_escape_string xác nh ki u d li u chođể đị ể ữ ệ
câutruy v n.ấ
Nh b n bi t hàmư ạ ế sprintf g m có hai tham s tr lên, tham s th nh t là chu i và trong ó cóồ ố ở ố ứ ấ ỗ đ
ch a m t o n Regex thay th , tham s th 2 tr i là các giátr s c thay th t ng ng.ứ ộ đ ạ để ế ố ứ ở đ ị ẽ đượ ế ươ ứ
Giátr rápvào s c convert phùh p r i m i rap vàoị ẽ đượ ợ ồ ớ
Ví d :ụ
1
2
3
$webname = 'freetuts.net';
$title = 'học lập trình miễn phí';
echo sprintf('Website %s laf website %s', $webname, $title);
K t qu in ra là:ế ả Website freetuts.net là website h c l p trình mi n phíọ ậ ễ .
N u b n ch a bi t v hàm sprintf thì vàoế ạ ư ế ề link này c nhé.đọ
Nh b n bi t hàmư ạ ế mysql_real_escape_string có nhi m v s chuy n m t chu i thành chu iệ ụ ẽ ể ộ ỗ ỗ
query an toàn, nênta s k t h p nó gánvào câutruy v n. Ví d :ẽ ế ợ để ấ ụ
1
2
$sql = "SELECT * FROM member WHERE username = '%s' AND password = '%s'";
echo sprintf($sql, mysql_real_escape_string("thehalfheart"), mysql_real_escape_str
K t qu là:ế ả SELECT * FROM member WHERE username = 'thehalfheart' AND password =
'matkhau'.
ang C p Nh t Thêm...Đ ậ ậ
3. L i k tờ ế
Th t s thì k thu t này r t nhi u và dài, ki n th c c a mình ch mang t m c n b n nên mình chậ ự ỹ ậ ấ ề ế ứ ủ ỉ ầ ă ả ỉ
share c c n b n. N u b n mu n nâng cao thì có th c thêm tài li u trên m ng, ch y u làđượ ă ả ế ạ ố ể đọ ệ ạ ủ ế
ti ng anh. Tuy nhiên th t s khi i làm b n nên s d ng Framwork, vì FW a h tr r t t t nh ngế ậ ự đ ạ ử ụ đ ỗ ợ ấ ố ữ
ki u t n công website thông d ng hi n nay r i, b n thân chúng ta không th nào tìm hi u sâuể ấ ụ ệ ồ ả ể ể
c.đượ

Weitere ähnliche Inhalte

Andere mochten auch

Thuc thi menh lenh voi co so du lieu
Thuc thi menh lenh voi co so du lieuThuc thi menh lenh voi co so du lieu
Thuc thi menh lenh voi co so du lieu
truong le hung
 
Cach su dung databinding
Cach su dung databindingCach su dung databinding
Cach su dung databinding
truong le hung
 
bao cao linux
bao cao linuxbao cao linux
bao cao linux
binhnv186
 
các bước hack server
các bước hack servercác bước hack server
các bước hack server
truong le hung
 
bài giảng phân tích thiết kệ thống thông tin (hutech)
bài giảng phân tích thiết kệ thống thông tin (hutech)bài giảng phân tích thiết kệ thống thông tin (hutech)
bài giảng phân tích thiết kệ thống thông tin (hutech)
truong le hung
 
Bao cao do an Phát triển hệ thống game server Online
Bao cao do an Phát triển hệ thống game server OnlineBao cao do an Phát triển hệ thống game server Online
Bao cao do an Phát triển hệ thống game server Online
Hoàng Phạm
 
Loi baomat windows(f)
Loi baomat windows(f)Loi baomat windows(f)
Loi baomat windows(f)
Huy Tiến
 
Lab 20 active directory right managment services (ad rms)
Lab 20 active directory right managment services (ad rms)     Lab 20 active directory right managment services (ad rms)
Lab 20 active directory right managment services (ad rms)
Pham Viet Dung
 
Tim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chongTim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chong
Vu Trung Kien
 

Andere mochten auch (18)

Buoi3 tools-vietseo
Buoi3 tools-vietseoBuoi3 tools-vietseo
Buoi3 tools-vietseo
 
Thuc thi menh lenh voi co so du lieu
Thuc thi menh lenh voi co so du lieuThuc thi menh lenh voi co so du lieu
Thuc thi menh lenh voi co so du lieu
 
Cach su dung databinding
Cach su dung databindingCach su dung databinding
Cach su dung databinding
 
bao cao linux
bao cao linuxbao cao linux
bao cao linux
 
Stored procedure
Stored procedureStored procedure
Stored procedure
 
các bước hack server
các bước hack servercác bước hack server
các bước hack server
 
Kiểm thử bảo mật web
Kiểm thử bảo mật webKiểm thử bảo mật web
Kiểm thử bảo mật web
 
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
Các công cụ cần thiết cho quá trình Reverse Engineering .NET (bản đầy đủ)
 
Ma hoa voi khoa
Ma hoa voi khoaMa hoa voi khoa
Ma hoa voi khoa
 
bài giảng phân tích thiết kệ thống thông tin (hutech)
bài giảng phân tích thiết kệ thống thông tin (hutech)bài giảng phân tích thiết kệ thống thông tin (hutech)
bài giảng phân tích thiết kệ thống thông tin (hutech)
 
Bao cao do an Phát triển hệ thống game server Online
Bao cao do an Phát triển hệ thống game server OnlineBao cao do an Phát triển hệ thống game server Online
Bao cao do an Phát triển hệ thống game server Online
 
Tổng quan tong-quan_anninhmang
Tổng quan tong-quan_anninhmangTổng quan tong-quan_anninhmang
Tổng quan tong-quan_anninhmang
 
Những lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần applicationNhững lỗi bảo mật web thường gặp ở phần application
Những lỗi bảo mật web thường gặp ở phần application
 
Loi baomat windows(f)
Loi baomat windows(f)Loi baomat windows(f)
Loi baomat windows(f)
 
Lab 20 active directory right managment services (ad rms)
Lab 20 active directory right managment services (ad rms)     Lab 20 active directory right managment services (ad rms)
Lab 20 active directory right managment services (ad rms)
 
Charlotte ISSA - 2016 - Mainframe Hacking
Charlotte ISSA - 2016 - Mainframe HackingCharlotte ISSA - 2016 - Mainframe Hacking
Charlotte ISSA - 2016 - Mainframe Hacking
 
Tim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chongTim hieu lo hong web va cach phong chong
Tim hieu lo hong web va cach phong chong
 
Professional programme on Financial modelling using Microsoft Excel
Professional programme on Financial modelling using Microsoft ExcelProfessional programme on Financial modelling using Microsoft Excel
Professional programme on Financial modelling using Microsoft Excel
 

Mehr von ducmanhkthd (7)

Ids
Ids Ids
Ids
 
Tác phong làm việc chuyên nghiệp
Tác phong làm việc chuyên nghiệpTác phong làm việc chuyên nghiệp
Tác phong làm việc chuyên nghiệp
 
linear filtering & Non-linear filtering
linear filtering & Non-linear filteringlinear filtering & Non-linear filtering
linear filtering & Non-linear filtering
 
HẠ TẦNG KHÓA CÔNG KHAI(PKI)
HẠ TẦNG KHÓA CÔNG KHAI(PKI)HẠ TẦNG KHÓA CÔNG KHAI(PKI)
HẠ TẦNG KHÓA CÔNG KHAI(PKI)
 
Toán rời rạc-Dành cho sinh viên,người thi cao học
Toán rời rạc-Dành cho sinh viên,người thi cao họcToán rời rạc-Dành cho sinh viên,người thi cao học
Toán rời rạc-Dành cho sinh viên,người thi cao học
 
Slide môn Đảm bảo an toàn thông tin
Slide môn Đảm bảo an toàn thông tinSlide môn Đảm bảo an toàn thông tin
Slide môn Đảm bảo an toàn thông tin
 
Triển khai các chính sách và tiêu chuẩn trong thực tiễn
Triển khai các chính sách và tiêu chuẩn trong thực tiễnTriển khai các chính sách và tiêu chuẩn trong thực tiễn
Triển khai các chính sách và tiêu chuẩn trong thực tiễn
 

Kỹ thuật tấn công sql injection và cách phòng chống trong php

  • 1. k thu t t n công SQL Injection và cáchỹ ậ ấ phòng ch ng trong phpố AUTHOR: THEHALFHEART PUBLIC DATE: 14/08/2014 CATEGORY: PHP VIEWS: 511 bài tr c chúng ta ã c tìm hi u cáchƠ ướ đ đượ ể phòng ch ng CSRFố , v y thì trong bài này ta s tìmậ ẽ hi u thêm m t k thu t khác c ng r t hay s d ng t n công vào nh ngể ộ ỹ ậ ũ ấ ử ụ để ấ ữ website c a nh ng tayủ ữ ngh thi u kinh nghi m l p trình, ó làề ế ệ ậ đ k thu t t n công SQL Injectionỹ ậ ấ . 1. SQL Injection là gì? SQL Injection là m t k thu t l i d ng nh ng l h ng v câu truy v n l y d li u c a nh ngộ ỹ ậ ợ ụ ữ ỗ ổ ề ấ ấ ữ ệ ủ ữ website không an toàn trên web, âylà m t k thu t t n công r t ph bi n và s thành công c ađ ộ ỹ ậ ấ ấ ổ ế ự ủ nó c ng t ng i cao. Tuy nhiên vào nh ng n m tr l i âythì xu t hi n nhi u Framwork nênnóũ ươ đố ữ ă ở ạ đ ấ ệ ề gi m h n, vì cácFW ãh tr r t t t vi c ch ng l iả ẳ đ ỗ ợ ấ ố ệ ố ạ hack SQL Injection này. Ch c h n các b n ã bi t mô hình ho t ng c a website r i nh ? Khi m t request c g i tắ ẳ ạ đ ế ạ độ ủ ồ ỉ ộ đượ ử ừ client thì ngôn ng SERVER nh PHP s l y các thông tin t request ó. Nh ng b n thân nóữ ư ẽ ấ ừ đ ư ả không h phát hi n ra nh ng thông tin ó có ch a nh ng câuSQL c, vì th công vi c này taề ệ ữ đ ứ ữ độ ế ệ ph i trách nhi mả đổ ệ t i kinh nghi m c a l p trình viên.ớ ệ ủ ậ Ví d :ụ Gi s tôi có m t trang ng nh p v i hai thông tin làả ử ộ đă ậ ớ tên ng nh pđă ậ và m t kh uậ ẩ . Và o n code x lý t n công sql injectionđ ạ ử ấ c a tôi có d ng nh sau:ủ ạ ư 1 2 3 4 $username = $_POST['username']; $password = $_POST['password']; $sql = "select count(*) from user where username = '$username' AND password = '$pa Tr ng h p 1:ườ ợ Bâygi tôi nh pờ ậ username = thehalfheart và password = matkhau thì câutruy v n s là:ấ ẽ select count(*) from user where username = 'thehalfheart AND password = 'matkhau'
  • 2. Tr ng h p 2: Bây gi tôi nh pườ ợ ờ ậ username = somename và password = something' OR '1. Như v y câusql s là:ậ ẽ SELECT * FROM cms_user WHERE user_username = 'thehalfheart' AND user_password = 'something' OR '1' Ch y câutruy v n này lênthì k t qu nó tr v là danh sách user nênn u code cùicùi thì login cạ ấ ế ả ả ề ế đượ luôn. Trên âylà m t ví d i n hình thôi, ch th c t thì hacker còn r t nhi u m u m o khác. Tuy nhiênđ ộ ụ đ ể ứ ự ế ấ ề ư ẹ chung quy l i v i k thu t t n công SQL Injection ta v n có th không ch c nó.ạ ớ ỹ ậ ấ ẫ ể ế đượ 2. Phòng ch ng SQL Injectionố V i kinh nghi m c a mình thì th t s ch a phântích sâuvào k thu t này, tuy nhiênmình c ng bi tớ ệ ủ ậ ự ư ỹ ậ ũ ế chút ít kinh nghi m có th ch ng l i k thu t này.ệ để ể ố ạ ỹ ậ 2.1. Nh n d li u ki u INTậ ữ ệ ể Khi b n nh n d li u ID trênURL thì cách t t nh t b n nênạ ậ ữ ệ ố ấ ạ ép ki uể , chuy n nó v ki u s INT, sauể ề ể ố ó chuy n v ki u STRING (n u c n thi t).đ ể ề ể ế ầ ế Ví d : tôi có url nh sau: domain.com/detail.php?id=12ụ ư 1 $id = isset($_GET['id']) ? (string)(int)$_GET['id'] : false; Nh v y thì cho dù ta nh p vào k t gì i n a u s b clear ra kh i h t. Ho c ta có th dùngư ậ ậ ỳ ự đ ữ đề ẽ ị ỏ ế ặ ể cách d c b ng cách dùngướ ằ hàm preg_replace trong PHP xóa i nh ng ký t không ph i là chđể đ ữ ự ả ữ s .ố 1 2 $id = isset($_GET['id']) ? $_GET['id'] : false; $id = str_replace('/[^0-9]/', '', $id); R t n gi n, tuy nhiênmình khuy n khích nêndùng ép ki u trong PHP, vì nó n gi n.ấ đơ ả ế ể đơ ả 2.2 Vi t l i ng d n có thế ạ đườ ẫ ể ch ng SQL Injectionố V n này có v h i l nh ng b n thânmình th y r t úng. Khi b n vi t l i ng d n dùtrên hấ đề ẻ ơ ạ ư ả ấ ấ đ ạ ế ạ đườ ẫ ệ th ng route c aố ủ FW hay dù trên file .htaccess thì hãy fix chính xác o n mã Regular Expressionđ ạ (Tham kh oả Regular Expression c n b nă ả ). Ví d :ụ Tôi có ng d n sau khi rewirte là nh sau: domain.com/hoc-lap-trinh-mien-phi-tai-đườ ẫ ư freetuts.html thì o n Regex tôi s vi t là:đ ạ ẽ ế /([a-zA-Z0-9-]+)/([a-zA-Z0-9-]+).html/ . Thay vì nh v y thì tôi s vi t chính xácư ậ ẽ ế /([a- zA-Z0-9-]+)/([0-9]).html/ thì s t t h n. Và ng quên là c ng n i ng link g c c a nóẽ ố ơ đừ ũ ẩ đ đườ ố ủ nhé. 2.3 S d ng hàm sprintf vàử ụ mysql_real_escape_string xác nh ki u d li u chođể đị ể ữ ệ câutruy v n.ấ
  • 3. Nh b n bi t hàmư ạ ế sprintf g m có hai tham s tr lên, tham s th nh t là chu i và trong ó cóồ ố ở ố ứ ấ ỗ đ ch a m t o n Regex thay th , tham s th 2 tr i là các giátr s c thay th t ng ng.ứ ộ đ ạ để ế ố ứ ở đ ị ẽ đượ ế ươ ứ Giátr rápvào s c convert phùh p r i m i rap vàoị ẽ đượ ợ ồ ớ Ví d :ụ 1 2 3 $webname = 'freetuts.net'; $title = 'học lập trình miễn phí'; echo sprintf('Website %s laf website %s', $webname, $title); K t qu in ra là:ế ả Website freetuts.net là website h c l p trình mi n phíọ ậ ễ . N u b n ch a bi t v hàm sprintf thì vàoế ạ ư ế ề link này c nhé.đọ Nh b n bi t hàmư ạ ế mysql_real_escape_string có nhi m v s chuy n m t chu i thành chu iệ ụ ẽ ể ộ ỗ ỗ query an toàn, nênta s k t h p nó gánvào câutruy v n. Ví d :ẽ ế ợ để ấ ụ 1 2 $sql = "SELECT * FROM member WHERE username = '%s' AND password = '%s'"; echo sprintf($sql, mysql_real_escape_string("thehalfheart"), mysql_real_escape_str K t qu là:ế ả SELECT * FROM member WHERE username = 'thehalfheart' AND password = 'matkhau'. ang C p Nh t Thêm...Đ ậ ậ 3. L i k tờ ế Th t s thì k thu t này r t nhi u và dài, ki n th c c a mình ch mang t m c n b n nên mình chậ ự ỹ ậ ấ ề ế ứ ủ ỉ ầ ă ả ỉ share c c n b n. N u b n mu n nâng cao thì có th c thêm tài li u trên m ng, ch y u làđượ ă ả ế ạ ố ể đọ ệ ạ ủ ế ti ng anh. Tuy nhiên th t s khi i làm b n nên s d ng Framwork, vì FW a h tr r t t t nh ngế ậ ự đ ạ ử ụ đ ỗ ợ ấ ố ữ ki u t n công website thông d ng hi n nay r i, b n thân chúng ta không th nào tìm hi u sâuể ấ ụ ệ ồ ả ể ể c.đượ