<![CDATA[Latest posts for the topic "Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản"]]> /hvaonline/posts/list/8.html JForum - http://www.jforum.net Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản Code:
<?php
  $cautruyvan = $_SERVER['QUERY_STRING'];
  $tukhoa = array('chr(', 'chr=', 'chr%20', '%20chr', 'wget%20', '%20wget', 'wget(',
 			       'cmd=', '%20cmd', 'cmd%20', 'rush=', '%20rush', 'rush%20',
                   'union%20', '%20union', 'union(', 'union=', 'echr(', '%20echr', 'echr%20', 'echr=',
                   'esystem(', 'esystem%20', 'cp%20', '%20cp', 'cp(', 'mdir%20', '%20mdir', 'mdir(',
                   'mcd%20', 'mrd%20', 'rm%20', '%20mcd', '%20mrd', '%20rm',
                   'mcd(', 'mrd(', 'rm(', 'mcd=', 'mrd=', 'mv%20', 'rmdir%20', 'mv(', 'rmdir(',
                   'chmod(', 'chmod%20', '%20chmod', 'chmod(', 'chmod=', 'chown%20', 'chgrp%20', 'chown(', 'chgrp(',
                   'locate%20', 'grep%20', 'locate(', 'grep(', 'diff%20', 'kill%20', 'kill(', 'killall',
                   'passwd%20', '%20passwd', 'passwd(', 'telnet%20', 'vi(', 'vi%20',
                   'insert%20into', 'select%20', 'nigga(', '%20nigga', 'nigga%20', 'fopen', 'fwrite', '%20like', 'like%20',
                   '$_request', '$_get', '$request', '$get', '.system', 'HTTP_PHP', '&aim', '%20getenv', 'getenv%20',
                   'new_password', '&icq','/etc/password','/etc/shadow', '/etc/groups', '/etc/gshadow',
                   'HTTP_USER_AGENT', 'HTTP_HOST', '/bin/ps', 'wget%20', 'uname\x20-a', '/usr/bin/id',
                   '/bin/echo', '/bin/kill', '/bin/', '/chgrp', '/chown', '/usr/bin', 'g\+\+', 'bin/python',
                   'bin/tclsh', 'bin/nasm', 'perl%20', 'traceroute%20', 'ping%20', '.pl', '/usr/X11R6/bin/xterm', 'lsof%20',
                   '/bin/mail', '.conf', 'motd%20', 'HTTP/1.', '.inc.php', 'config.php', 'cgi-', '.eml',
                   'file\://', 'window.open', '<SCRIPT>', 'javascript\://','img src', 'img%20src','.jsp','ftp.exe',
                   'xp_enumdsn', 'xp_availablemedia', 'xp_filelist', 'xp_cmdshell', 'nc.exe', '.htpasswd',
                   'servlet', '/etc/passwd', 'wwwacl', '~root', '~ftp', '.js', '.jsp', 'admin_', '.history',
                   'bash_history', '.bash_history', '~nobody', 'server-info', 'server-status', 'reboot%20', 'halt%20',
                   'powerdown%20', '/home/ftp', '/home/www', 'secure_site, ok', 'chunked', 'org.apache', '/servlet/con',
                   '<script', '/robot.txt' ,'/perl' ,'mod_gzip_status', 'db_mysql.inc', '.inc', 'select%20from',
                   'select from', 'drop%20', '.system', 'getenv', 'http_', '_php', 'php_', 'phpinfo()', '<?php', '?>', 'sql=');

  $kiemtra = str_replace($tukhoa, '*', $cautruyvan);

  if ($cautruyvan != $kiemtra)
    {
      $cremotead = $_SERVER['REMOTE_ADDR'];
      $cuseragent = $_SERVER['HTTP_USER_AGENT'];

      die( "Phat hien co su tan cong! <br /><br /><b>Viec tan cong nay da bi ngan chan va se duoc ghi nhan lai:</b><br />$cremotead - $cuseragent" );
    }

?>
Thêm đoạn code sau vào file mà bạn muốn bảo vệ: Code:
<?php

include "AntiSQLInjection.php"; 

?>
Có gì còn chưa hay xin các bạn bổ xung.]]>
/hvaonline/posts/list/20280.html#120436 /hvaonline/posts/list/20280.html#120436 GMT
Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#120457 /hvaonline/posts/list/20280.html#120457 GMT Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

xnohat wrote:
Hề hề Query Strings được truyền tới server đôi khi cần các từ trên thì sao bạn :D vd:username của tui tui đặt là UNION TEAM hay admin_chinh admin_phu thì bạn lock hết sao ? nhất là khi query string chứa một bài post cho một bài viết trên forum chẳng hạn thì đôi khi đầy các từ trên ( HVA thì khỏi nói, liên tục hén :D ) Cho xin ý kiến nhe bạn. Thân, 
Đó và việc bảo mật của webmaster, các webmaster thường không có user đăng ký các tên nhạy cảm như vậy. Bạn hãy thử dùng công cụ search trên HVA để tìm từ khóa "UNION" xem có được phép không ? Để có được sự bảo mật đôi khi người ta sẽ gặp phải những hạn chế đi kèm, không có một công cụ bảo mật nào được gọi là hoàn hảo cả, cái gì cũng có 2 mặt của nó bạn à Cảm ơn bạn vì những ý kiến đóng góp !]]>
/hvaonline/posts/list/20280.html#120476 /hvaonline/posts/list/20280.html#120476 GMT
Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#120493 /hvaonline/posts/list/20280.html#120493 GMT Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

gamma95 wrote:
@hàng sách tay+ xnohat: Bộ SQL injection chỉ xảy ra trên $_GET thôi hay sao mà thấy các bạn chỉ validate trên $_SERVER['QUERY_STRING'] :D  
Hình như bạn chưa đọc kỹ, tôi có nêu rõ phương thức của nó là kiểm tra dữ liệu đầu vào, đây là chỉ một trong những cách để phòng chống SQL injection đơn giản thôi chứ không phải toàn diện. Cảm ơn ý kiến đóng góp của bạn.]]>
/hvaonline/posts/list/20280.html#120500 /hvaonline/posts/list/20280.html#120500 GMT
Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#120502 /hvaonline/posts/list/20280.html#120502 GMT Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

gamma95 wrote:
@ hàng sách tay: Đồng chí mới là chưa đọc kỹ, kiểm tra dữ liệu đầu vào mà chỉ kiểm tra trên GET là thua rồi .. :) 
:) Bạn có cao kiến nào thì xin chỉ giáo thêm !!! Thanks]]>
/hvaonline/posts/list/20280.html#120503 /hvaonline/posts/list/20280.html#120503 GMT
Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#120505 /hvaonline/posts/list/20280.html#120505 GMT Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#120517 /hvaonline/posts/list/20280.html#120517 GMT Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

gamma95 wrote:
chả có cao kiến gì, chỉ thấy nó sơ sài nên góp ý ! :) 
Thế nào mới gọi là cao kiến vậy chị Gammar95 :D]]>
/hvaonline/posts/list/20280.html#120519 /hvaonline/posts/list/20280.html#120519 GMT
Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

hangsachtay wrote:
Hình như bạn chưa đọc kỹ, tôi có nêu rõ phương thức của nó là kiểm tra dữ liệu đầu vào, đây là chỉ một trong những cách để phòng chống SQL injection đơn giản thôi chứ không phải toàn diện. Cảm ơn ý kiến đóng góp của bạn. 
Ở đây mới chỉ kiểm tra được dữ liệu bằng $_SERVER['QUERY_STRING'] tức là chỉ kiểm tra được dữ liệu truyền trên url . Vậy trường hợp dữ liệu được đưa vào là POST thì cái trên vô hiệu . Ý bác gamma là vậy phải không? :D ]]>
/hvaonline/posts/list/20280.html#120528 /hvaonline/posts/list/20280.html#120528 GMT
Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

gamma95 wrote:
@hàng sách tay+ xnohat: Bộ SQL injection chỉ xảy ra trên $_GET thôi hay sao mà thấy các bạn chỉ validate trên $_SERVER['QUERY_STRING'] :D  
Thì cậu ấy mới bắt đầu trên cái Query Strings thì chúng ta cứ bàn trên cái đó đã vì mới đó ta đã thấy cái sơ sót của phương pháp này, nó quả thật là "hiệu quả đơn giản".]]>
/hvaonline/posts/list/20280.html#120544 /hvaonline/posts/list/20280.html#120544 GMT
Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#120565 /hvaonline/posts/list/20280.html#120565 GMT Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

ThíchHắcKinh wrote:
Các bác cứ làm khó người ta hoài... Get hay Pót gì không cần biết .. miễn là khi truy vấn vào database thì nó sẽ có câu truy vấn ... và câu truy vấn này qua cái bộ lọc ở trên.. Lọc ngay các "từ khóa" có tính chất nhạy cảm ..Thế thôi .. Quá đơn giản và hiệu quả ..Vậy mà các bác cứ đè nhau ra mà cãi :D 
không phải là cãi, mà nói để góp ý mà phát triển mừ. g95 nói vậy không lẽ chủ topic không rút ra được cái gì hay sao nà? :( ]]>
/hvaonline/posts/list/20280.html#120579 /hvaonline/posts/list/20280.html#120579 GMT
Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#180069 /hvaonline/posts/list/20280.html#180069 GMT Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#180105 /hvaonline/posts/list/20280.html#180105 GMT Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#180115 /hvaonline/posts/list/20280.html#180115 GMT Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

nhoccon.dakmil wrote:
Cái này đúng là không toàn diện vì bypass dc hết mà  
Bạn có thể vui lòng nói rõ hơn về cách bypass cái bộ lọc này được không? Cảm ơn trước!]]>
/hvaonline/posts/list/20280.html#185093 /hvaonline/posts/list/20280.html#185093 GMT
Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#185097 /hvaonline/posts/list/20280.html#185097 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#185105 /hvaonline/posts/list/20280.html#185105 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#185354 /hvaonline/posts/list/20280.html#185354 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản ]]> /hvaonline/posts/list/20280.html#186285 /hvaonline/posts/list/20280.html#186285 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản Hề hề Query Strings được truyền tới server đôi khi cần các từ trên thì sao bạn smilie vd:username của tui tui đặt là UNION TEAM hay admin_chinh admin_phu thì bạn lock hết sao ? nhất là khi query string chứa một bài post cho một bài viết trên forum chẳng hạn thì đôi khi đầy các từ trên ( HVA thì khỏi nói, liên tục hén smilie ) Cho xin ý kiến nhe bạn. Thân,  Mình đọc từ trên xuống dưới thì rõ ràng thấy nhận định của xnohat là hợp lý, vì nếu chặn tất tần tật một cách vô thức như vậy thì cái này thì không phải là cách tối ưu trong hầu hết trường hợp.
Đó và việc bảo mật của webmaster, các webmaster thường không có user đăng ký các tên nhạy cảm như vậy. Bạn hãy thử dùng công cụ search trên HVA để tìm từ khóa "UNION" xem có được phép không ? Để có được sự bảo mật đôi khi người ta sẽ gặp phải những hạn chế đi kèm, không có một công cụ bảo mật nào được gọi là hoàn hảo cả, cái gì cũng có 2 mặt của nó bạn à Cảm ơn bạn vì những ý kiến đóng góp ! 
Đó là chính sách bảo mật ở một số website, như HVA thường xuyên gánh chịu lượng request thì đó là một yêu cầu tối thiểu để chặn việc phá hoại :) Nói như bạn có nghĩa là mình không thể dùng Tool của bạn để áp dụng cho một website nói về Hacking à ? Vì khi làm một website nói về Hacking thì mình lại phải gõ đi gõ lại khá nhiều từ mà bạn đã chặn đấy :D kaka Về cơ bản, trong PHP, khi dùng $_REQUEST là nó-đã-bao-gồm-$_GET-và-$_POST, do đó nếu hangxachtay chặn từ $_REQUEST là khá ổn về mặt xử lý dữ liệu đầu vào, chứ dùng mỗi $_GET thì không ăn thua, nếu không muốn nói là quá AMATEUR ! ]]>
/hvaonline/posts/list/20280.html#186549 /hvaonline/posts/list/20280.html#186549 GMT
Re: Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

gamma95 wrote:
Mấy giờ rồi còn SQL injection ??? 
thế mấy giờ mới hết sql hả anh ? nó không bao giờ là hết giờ cả :( rất nhiều site nổi tiếng vẫn bị dính sql đó ? ]]>
/hvaonline/posts/list/20280.html#187409 /hvaonline/posts/list/20280.html#187409 GMT
Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#228945 /hvaonline/posts/list/20280.html#228945 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản Code:
union select 1 from information_schema.tables--
Với việc người dùng sử dụng chỉnh sửa COOKIE để tiến hành SQL injection. Với phương án bạn đưa ra không hiệu quả và khả thi như mong đợi.

thichhachkinh wrote:
Các bác cứ làm khó người ta hoài... Get hay Pót gì không cần biết .. miễn là khi truy vấn vào database thì nó sẽ có câu truy vấn ... và câu truy vấn này qua cái bộ lọc ở trên.. Lọc ngay các "từ khóa" có tính chất nhạy cảm ..Thế thôi .. Quá đơn giản và hiệu quả ..Vậy mà các bác cứ đè nhau ra mà cãi  
Đọc cái source PHP còn không hiểu mô tê gì thế mà gió lữa vẫn ầm ầm thế này.

nguago wrote:
Xin hỏi nếu hacker nhập chữ hoa thì sao ? Làm sao để cấm cả chữ hoa mà ko phải nhập cả chữ hoa vào danh sách? E thấy cái code này khá hữu hiệu, e cứ đưa cái profix của các trường trong data vào danh sách cấm là yên tâm  
SQL sử dụng chử hoa bao giờ, Trung Cheng chiếm được Washington rồi à.

gamma95 wrote:
Mấy giờ rồi còn SQL injection ???  
Bồ giỏi thì giải thích cho người không biết hiểu, chứ nói trống không thế tạo cơ hội cho mấy bạn trẻ trâu cãi chày cãi cối thôi. P/S: em không có ý đào mộ đâu, hôm nay viết lại cái framework vào đọc lại mấy bài liên quan thấy bức xúc.]]>
/hvaonline/posts/list/20280.html#262539 /hvaonline/posts/list/20280.html#262539 GMT
Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

chiro8x wrote:

nguago wrote:
Xin hỏi nếu hacker nhập chữ hoa thì sao ? Làm sao để cấm cả chữ hoa mà ko phải nhập cả chữ hoa vào danh sách? E thấy cái code này khá hữu hiệu, e cứ đưa cái profix của các trường trong data vào danh sách cấm là yên tâm  
SQL sử dụng chử hoa bao giờ, Trung Cheng chiếm được Washington rồi à.  
Ý của nguago là chữ in hoa chứ không phải chữ Hoa (Trung Quốc). Với cách phòng chống của chủ topic thì chỉ với chữ viết thường còn in hoa thì phải bổ sung thêm, ngoài ra nếu attacker dùng vừa hoa vừa thường nữa thì càng rắc rối hơn , vd : /**/uniOn/**/sELeCt Bài viết cũng đã khà cũ rồi, hiện tại thì cách phòng chống SQL Injection khi dùng PHP và MySQL còn có mysql_real_escape_string, addslashes để lọc câu truy vấn.]]>
/hvaonline/posts/list/20280.html#262542 /hvaonline/posts/list/20280.html#262542 GMT
Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#262545 /hvaonline/posts/list/20280.html#262545 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#262550 /hvaonline/posts/list/20280.html#262550 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#262647 /hvaonline/posts/list/20280.html#262647 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

WinDak wrote:
Nhìn vào "blacklist" này dễ thấy ngay 1 cách bypass để chèn các truy vấn sql. Xin hỏi anh em nào nhìn thấy không ? 
Code:
union+select+1+from+....
Dùng "+" thay cho kí tự [space] 0x20 (32 dec). Sửa cái này lại đã. Code:
$kiemtra = str_replace($tukhoa, '*',strtolower($cautruyvan));
Nếu là MS SQL thì có thể dùng: Code:
sel/**/ect%20...
]]>
/hvaonline/posts/list/20280.html#262655 /hvaonline/posts/list/20280.html#262655 GMT
Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#262664 /hvaonline/posts/list/20280.html#262664 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản http://www.pcre.org/ ) để cản, mình chú ý vào các truy vấn SQL chứa SELECT. Trong một bài mình đã từng đề cập: /hvaonline/posts/list/39497.html Vì thiếu hiểu biết nên luật được mình tìm ra chưa chuẩn xác trong quá trình tìm hiểu thêm mình đã bỏ sót khi người ta kết thúc query string bằng %00 hoặc #. Mình đang tính viết lại bằng pre_match(); , khuyết điểm của nó là hơi tốn tài nguyên, nhưng cản truy vấn trước khi gọi mysql_query(). Mình không tin tưởng cái mysql_real_escape_string(); lắm, tại mình sợ là có những phương pháp khác có thể vượt qua nó nhưng lại ngoài tầm hiểu biết của mình, và sợ là nó làm dị biến dữ liệu. Mã kiểm tra mình làm như sau: Code:
<?php
if(!function_exists("sqlj")){
   function sqlj($data){
      //Check here
   }
}

if(!function_exists("sqlj_check")){
   function sqlj_check($data){
      $key = NULL;
      $value = NULL;
      foreach($data as $key => $value){
         if(sqlj($value))exit();
      }     
   }
}

sqlj_check($_GET);
sqlj_check($_POST);
sqlj_check($_COOKIE);
?>
Không biết có noob quá không :D.]]>
/hvaonline/posts/list/20280.html#262667 /hvaonline/posts/list/20280.html#262667 GMT
Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản //Check Here   được không ? chứ nhìn thế này thì không biết có gì khác cái cũ. ]]> /hvaonline/posts/list/20280.html#262670 /hvaonline/posts/list/20280.html#262670 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản Code:
return preg_match("/^([\'\)\"a-zA-Z0-9])+([0-255[:ascii:]])+select+([0-255[:ascii:]])+([\-])+([0-255[:ascii:]])+$/",strtolower($data))?true:false;
Vẫn là cái củ mà ! chưa fix được mấy bửa nay máy tớ cháy main board mang đi sửa :|.]]>
/hvaonline/posts/list/20280.html#262673 /hvaonline/posts/list/20280.html#262673 GMT
Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#262689 /hvaonline/posts/list/20280.html#262689 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#262693 /hvaonline/posts/list/20280.html#262693 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#262694 /hvaonline/posts/list/20280.html#262694 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản /hvaonline/posts/list/20280.html#263873 /hvaonline/posts/list/20280.html#263873 GMT Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

WinDak wrote:
Nhìn vào "blacklist" này dễ thấy ngay 1 cách bypass để chèn các truy vấn sql. Xin hỏi anh em nào nhìn thấy không ? 
Ta mã hoá câu truy vấn phải không anh Em mới học PHP, có gì mong anh chỉ giáo]]>
/hvaonline/posts/list/20280.html#263883 /hvaonline/posts/list/20280.html#263883 GMT
Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

quocbao9996 wrote:

WinDak wrote:
Nhìn vào "blacklist" này dễ thấy ngay 1 cách bypass để chèn các truy vấn sql. Xin hỏi anh em nào nhìn thấy không ? 
Ta mã hoá câu truy vấn phải không anh Em mới học PHP, có gì mong anh chỉ giáo 
Cậu mã hoá thế nào ? sao tự dưng phán trớt quớt thế ?.]]>
/hvaonline/posts/list/20280.html#263988 /hvaonline/posts/list/20280.html#263988 GMT
Phòng chống SQL Injection bằng PHP, hiệu quả đơn giản

chiro8x wrote:

quocbao9996 wrote:

WinDak wrote:
Nhìn vào "blacklist" này dễ thấy ngay 1 cách bypass để chèn các truy vấn sql. Xin hỏi anh em nào nhìn thấy không ? 
Ta mã hoá câu truy vấn phải không anh Em mới học PHP, có gì mong anh chỉ giáo 
Cậu mã hoá thế nào ? sao tự dưng phán trớt quớt thế ?. 
Em chỉ hỏi thôi chứ không hoàn toàn là phán Em thấy chủ topic có dùng $cautruyvan = $_SERVER['QUERY_STRING'], do đó nếu như ta encode cái url đó, ví dụ em đưa dữ liệu GET vào là index.php?input=%63%68%72%20%28. Nếu dùng $cautruyvan = $_SERVER['QUERY_STRING'] thì $cautruyvan sẽ có giá trị là %63%68%72%20%28 trong khi đó PHP lại hiểu là "chr(" -> vượt qua được cái black list. echo $_SERVER['QUERY_STRING'] và echo $_GET['input'] sẽ cho 2 giá trị input khác nhau. Cái mã hoá này là URL Encoding Em mới học PHP, có gì không biết mong các anh chỉ giáo thêm]]>
/hvaonline/posts/list/20280.html#263994 /hvaonline/posts/list/20280.html#263994 GMT