• Downloading from our site will require you to have a paid membership. Upgrade to a Premium Membership from 10$ a month today!

    Dont forget read our Rules! Also anyone caught Sharing this content will be banned. By using this site you are agreeing to our rules so read them. Saying I did not know is simply not an excuse! You have been warned.

Cách chống tấn công SQL Injection

Admin

Well-Known Member
Staff member
Administrator
A- Trên ngôn ngữ asp, aspx

1. Lọc dấu nháy “’”

function filter1( input )

input = replace(input, "'", "''")

filter1 = input

end function

2. Black list

function blacklist( input )

known_bad = array( "select", "insert", "update", "delete", "drop", "--", "'" )

blacklist = true

for i = lbound( known_bad ) to ubound( known_bad )

if ( instr( 1, input, known_bad(i), vbtextcompare ) <> 0 ) then

blacklist = false

exit function

end if

next

end function

3. whitelist

function whitelist( input )

good_password_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW XYZ0123456789"

whitelist = true

for i = 1 to len( input )

c = mid( input, i, 1 )

if ( InStr( good_password_chars, c ) = 0 ) then

whitelist = false

exit function

end if

next

end function

B- Trên ngôn ngữ php

1. Chống bypass

Thay vì lập trình như thông thường để nhận giá trị từ form đăng nhập

if(isset($_POST['username']) && isset($_POST['passwd']) ){

$username = $_POST['username'];

$passwd = $_POST['passwd'];

Fix:
if(isset($_POST['username']) && isset($_POST['passwd']) ){

$username = addslashes($_POST['username']);

$password = addslashes($_POST['password']);

2. Dùng hàm str_ireplace

tại link lỗi được thể hiện code như sau:

$id = $_GET['id'];

if(!isset($id))

$id=1;

$sql = "SELECT * FROM products WHERE id=$id limit 0,1";

Fix:

$id = str_ireplace('union','*',$_GET['id']);

//$id = $_GET['id'];

if(!isset($id))

$id=1;

$sql = "SELECT * FROM products WHERE id=$id limit 0,1";

Lưu ý :

a. Từ khóa union trên là đơn cử, bạn có thể dùng mãng. Mãng này chứa các giá trị blacklist

b. hàm str_replace cũng tương tự như hàm str_ireplacc, nhưng ở đây tôi dung hàm str_ireplace vì có ưu điểm là không phân biệt ký tự hoa, thường.

vd:
$id = str_replace('union','*',$_GET['id']);

Câu truy vấn union select all 1,2,3,4,5,6,7-- : sẽ không vượt qua

Nhưng Câu truy vấn uNioN select all 1,2,3,4,5,6,7-- : sẽ vượt qua

với
$id = str_ireplace('union','*',$_GET['id']);
bạn an toàn

c. Nên dùng ký tự thay thế trong hàm str_ireplace

vd:
$id = str_replace('union','',$_GET['id']);

Câu truy vấn union select all 1,2,3,4,5,6,7-- : sẽ không vượt qua

Nhưng Câu truy vấn uniUNIONon select all 1,2,3,4,5,6,7-- : sẽ vượt qua

Vì thế, nên dùng
$id = str_replace('union','*',$_GET['id']);

3. Ép kiểu

Một cách khác khá an toàn là ép kiểu. Cách này không xuất thông báo lỗi, giữ cho website an toàn mà vẫn “đẹp”

$id = (int)$_GET['id'];

//$id = $_GET['id'];

if(!isset($id))

$id=1;

$sql = "SELECT * FROM products WHERE id=$id limit 0,1";
 
chỗ này:
PHP:
if(isset($_POST['username']) && isset($_POST['passwd']) ){

$username = $_POST['username'];

$passwd = $_POST['passwd'];
fix ở đâu vậy admin?
 

Facebook Comments

New posts New threads New resources

Back
Top