banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận bảo mật Giúp về thủ thuật về phòng chống SQL-ịnection  XML
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 19/12/2011 20:29:17 (+0700) | #1 | 251309
vina_man
Member

[Minus]    0    [Plus]
Joined: 09/06/2011 05:35:02
Messages: 14
Offline
[Profile] [PM]
Hiện tại em đang viết 1 site bằng php và muốn cài đặt cách phòng chống sql-ịnection , em có lên mạng tổng hợp một số thông tin và rút ra một số thủ thuật sau .Mong mọi người góp ý và chỉ bảo .
1. Đặt biến id = ’
2. Sử dụng error_reporting(0); ở đầu đoạn PHP để che dấu lỗi.
3.Sử dụng hàm intval : $id=intval($_GET[id]);
4.Đặt biến cho câu query : @mysql_query("SELECT * FROM abc WHERE id=$id");
5.Sử dụng hàm Post thay cho hàm Get trong form ;
6.Tạo trang bảo vệ dùng code php
7.Tạo class database chống sql-injection
Và câu hỏi của em là : Dùng cách nào là tối ưu nhất , hoặc kết hợp như thế nào để tối ưu ? Ai có ý kiến hoặc thủ thuật nào khác hay xin đóng góp .Thank mọi người nhiều .
http://youtu.be/YltzHTN4sAs
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 20/12/2011 22:04:14 (+0700) | #2 | 251356
[Avatar]
lovestormknx
Member

[Minus]    0    [Plus]
Joined: 31/12/2006 16:39:16
Messages: 44
Offline
[Profile] [PM] [WWW]
Đọc 7 thủ thuật chống sql injection của bạn thì thấy bạn cần tìm hiểu thêm về sql injection, một số thủ thuật nghe nó "kỳ quái" và ngôn từ không chuẩn quá:

- Dùng hàm post thay cho hàm get trong form (vậy các website nếu không muốn bị sql injection thì chuyển hết form sang phương thức post chăng? Post, Get là phương thức của form, không phải hàm)
- Tạo trang bảo vệ dùng code php (bảo vệ cái gì?)
- Tạo class database chống sql injection (đi tạo cái class này rồi sẽ bị dẫn về lại câu hỏi "làm cách nào chống sql injection?")
- Đặt biến id (biến gì?)
- Đặt biến cho câu query (dấu @ đặt trước hàm là để che lỗi nếu hàm xảy ra lỗi)

Mấu chống của việc chống sql injection là kiểm tra và loại bỏ dữ liệu nguy hiểm mà user có thể input vào. Muốn chống hiệu quả thì phải tìm hiểu coi người ta inject sql như thế nào.
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 20/12/2011 22:56:51 (+0700) | #3 | 251360
vina_man
Member

[Minus]    0    [Plus]
Joined: 09/06/2011 05:35:02
Messages: 14
Offline
[Profile] [PM]

lovestormknx wrote:
Đọc 7 thủ thuật chống sql injection của bạn thì thấy bạn cần tìm hiểu thêm về sql injection, một số thủ thuật nghe nó "kỳ quái" và ngôn từ không chuẩn quá: 

Cám ơn anh đã nhận xét đúng đắng .

lovestormknx wrote:

- Dùng hàm post thay cho hàm get trong form (vậy các website nếu không muốn bị sql injection thì chuyển hết form sang phương thức post chăng? Post, Get là phương thức của form, không phải hàm) 

Em hiểu khi nào dùng Get và khi nào dùng Post ,

- Đặt biến id (biến gì?)
 

Mỗi table products có ít nhất 1 PK và biến ID này là biến phụ dùng để chuyển dữ liệu list products sang detall products và đặt bằng dấu " ' ".

Mấu chống của việc chống sql injection là kiểm tra và loại bỏ dữ liệu nguy hiểm mà user có thể input vào. Muốn chống hiệu quả thì phải tìm hiểu coi người ta inject sql như thế nào. 


Em cũng có tìm hiểu sơ qua về các cách inject .
Ở trên em chỉ là nêu ra vắng tắt chứ còn trình bày từng cách 1 thì rất dài dòng .Hiện tại em chỉ học năm 3 và đây la site đầu tiên em viết cho tư nhân .Nên cần nhiều ý kiến để hoàn thành tốt công việc , cũng như tìm hiểu thêm về SQL - injection Cám ơn anh đã ý kiến .
http://youtu.be/YltzHTN4sAs
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 21/12/2011 07:45:38 (+0700) | #4 | 251372
[Avatar]
khigiadano
Member

[Minus]    0    [Plus]
Joined: 27/02/2008 18:20:56
Messages: 370
Location: http://aspx.vn
Offline
[Profile] [PM] [Email] [WWW] [Yahoo!]
Vài cách giảm thiểu SQL injection
+ Sử dụng rewriteurl
+ Kiểm duyệt các dữ liệu đưa vào có hợp lệ hay không trước khi đưa vào dòng lệnh truy xuất SQL.(xác định số ra số, chuỗi ra chuỗi, loại bỏ các kí tự đặc biệt trong truy vấn sql)
+ Chặn các thông báo lỗi. (bên .NET mình hay dùng try catch)
...google thêm
Yahoo ID: khigiadano - Tel: 0907.870.676 - Email: khigiadano@gmail.com
Mình rất kém, vào đây học hỏi kinh nghiệm thôi...
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 21/12/2011 10:30:54 (+0700) | #5 | 251379
[Avatar]
jerrykun
Member

[Minus]    0    [Plus]
Joined: 25/02/2011 18:01:09
Messages: 41
Location: error_log
Offline
[Profile] [PM]
@vina_man,

Trước khi request được chuyển đến (ví dụ mysqld) xử lý thì nó đã đi qua những quá trình xử lý nào? Nhận biết rõ được quá trình đi của request thì bạn mới đưa ra được giải pháp tốt nhất để ngăn chặn.
Health, Knowledge, Family has the same value !
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 21/12/2011 16:17:33 (+0700) | #6 | 251391
[Avatar]
hackermientay
Member

[Minus]    0    [Plus]
Joined: 27/06/2006 23:21:20
Messages: 35
Offline
[Profile] [PM]
Trước khi tìm hiểu về SQL Injection cần tìm hiểu về cái DB mình đang sử dụng, ngôn ngữ web mình đang xài, các giao thức, tiến trình request từ client đến server và sự đáp lại của server thế nào đã, bạn nói mà T cảm thấy bức xúc quá, không có cái nào là đúng khi nói đến sql injection hết.
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 24/12/2011 19:49:04 (+0700) | #7 | 251485
chuandv
Member

[Minus]    0    [Plus]
Joined: 02/01/2008 19:31:12
Messages: 1
Offline
[Profile] [PM]
Khi mới viết, cách đơn giản là bạn kiểm tra dữ liệu đầu vào trước xem có "dấu hiệu" của SQL-Injection hay không sau đó mới thực hiện truy xuất dữ liệu với SQL.
Ví dụ đơn giản như: Username là abc' or 1=1--, có thể kiểm tra có từ or (or có dấu cách ở trước và sau)...
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 04/01/2012 22:33:20 (+0700) | #8 | 251871
saxvai
Member

[Minus]    0    [Plus]
Joined: 19/05/2008 23:44:23
Messages: 4
Offline
[Profile] [PM]
Mình thấy java , .net có hỗ trợ việc chống sql injection rất tốt. Do nó có cơ chế setParameter trong câu lệnh truy vấn, và loại bỏ ý nghĩa của các ký tự đặc biệt.
Còn php thì bạn cũng có thể viết một hàm để sử dụng nếu bạn lười. Còn nếu bạn siêng thì có thể tìm hiểu và sử dụng một vài framework có hỗ trợ sẵn . ^^
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 04/01/2012 22:50:01 (+0700) | #9 | 251872
[Avatar]
bolzano_1989
Journalist

[Minus]    0    [Plus]
Joined: 30/01/2007 12:49:15
Messages: 1406
Offline
[Profile] [PM]

saxvai wrote:
Mình thấy java , .net có hỗ trợ việc chống sql injection rất tốt. Do nó có cơ chế setParameter trong câu lệnh truy vấn, và loại bỏ ý nghĩa của các ký tự đặc biệt.
Còn php thì bạn cũng có thể viết một hàm để sử dụng nếu bạn lười. Còn nếu bạn siêng thì có thể tìm hiểu và sử dụng một vài framework có hỗ trợ sẵn . ^^ 


Java có những hỗ trợ gì sẵn có liên quan đến việc chống SQL Injection vậy bồ smilie ?
Kiểm tra các file bạn nghi ngờ có virus:
http://goo.gl/m3Fb6C
http://goo.gl/EqaZt
http://goo.gl/gEF8e
Nhận mẫu virus qua FB: http://goo.gl/70Xo23
HVA Malware Response Team: kiemtravirus@gmail.com
Trợ giúp diệt virus: http://goo.gl/2bqxY
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 05/01/2012 12:14:15 (+0700) | #10 | 251902
saxvai
Member

[Minus]    0    [Plus]
Joined: 19/05/2008 23:44:23
Messages: 4
Offline
[Profile] [PM]

bolzano_1989 wrote:

saxvai wrote:
Mình thấy java , .net có hỗ trợ việc chống sql injection rất tốt. Do nó có cơ chế setParameter trong câu lệnh truy vấn, và loại bỏ ý nghĩa của các ký tự đặc biệt.
Còn php thì bạn cũng có thể viết một hàm để sử dụng nếu bạn lười. Còn nếu bạn siêng thì có thể tìm hiểu và sử dụng một vài framework có hỗ trợ sẵn . ^^ 


Java có những hỗ trợ gì sẵn có liên quan đến việc chống SQL Injection vậy bồ smilie

PreparedStatement đó bồ
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 05/01/2012 13:26:24 (+0700) | #11 | 251910
[Avatar]
bolzano_1989
Journalist

[Minus]    0    [Plus]
Joined: 30/01/2007 12:49:15
Messages: 1406
Offline
[Profile] [PM]

saxvai wrote:

bolzano_1989 wrote:

saxvai wrote:
Mình thấy java , .net có hỗ trợ việc chống sql injection rất tốt. Do nó có cơ chế setParameter trong câu lệnh truy vấn, và loại bỏ ý nghĩa của các ký tự đặc biệt.
Còn php thì bạn cũng có thể viết một hàm để sử dụng nếu bạn lười. Còn nếu bạn siêng thì có thể tìm hiểu và sử dụng một vài framework có hỗ trợ sẵn . ^^ 


Java có những hỗ trợ gì sẵn có liên quan đến việc chống SQL Injection vậy bồ smilie

PreparedStatement đó bồ 


PreparedStatement dùng không phù hợp vẫn bị tấn công SQL Injection.
Kiểm tra các file bạn nghi ngờ có virus:
http://goo.gl/m3Fb6C
http://goo.gl/EqaZt
http://goo.gl/gEF8e
Nhận mẫu virus qua FB: http://goo.gl/70Xo23
HVA Malware Response Team: kiemtravirus@gmail.com
Trợ giúp diệt virus: http://goo.gl/2bqxY
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 05/01/2012 20:30:54 (+0700) | #12 | 251938
saxvai
Member

[Minus]    0    [Plus]
Joined: 19/05/2008 23:44:23
Messages: 4
Offline
[Profile] [PM]
PreparedStatement dùng không phù hợp vẫn bị tấn công SQL Injection. 

Uhm, cái nì tớ hoàn toàn đồng ý. Bởi vì nó còn phụ thuộc vào ngừoi lập trình phần lớn. Bởi thế nên sự cẩu thả và lừoi biếng sẽ tiềm ẩn những nguy cơ bị hack rất nhiều. Mà thôi, tôi nghĩ chúng ta cũng hơi lạc đề. Bởi vì tác giải chỉ muốn biết các giải pháp chống sql injection thôi.
Như các bạn khác cũng đã đề cập, nếu muốn chống sql injection, thì việc vô hiệu hoá những ký tự đặt biệt trong hệ quản trị cơ sở dữ liệu là điều cần thiết. Nên tiến hành việc kiểm tra ở cả client và server nữa để cho an toàn. Và nếu được thì bạn có thể dùng store procedure để lấy kết quả về.
Store procedure có khả năng loại bỏ ý nghĩa của các ký tự đặt biệt mà người sử dụng thêm vào.
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 12/01/2012 17:20:13 (+0700) | #13 | 252357
vina_man
Member

[Minus]    0    [Plus]
Joined: 09/06/2011 05:35:02
Messages: 14
Offline
[Profile] [PM]
Cám ơn tất cả mọi người đã ý kiến và đóng góp , sẵn đây xin chúc toàn bộ anh em trên diễn đàn năm mới 2012 nhiều thành công mới và niềm vui mới .Chúc diễn đàn ngày càng phát triễn .Thân

vina_man
http://youtu.be/YltzHTN4sAs
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 12/01/2012 21:16:04 (+0700) | #14 | 252364
[Avatar]
chube
Member

[Minus]    0    [Plus]
Joined: 22/10/2010 02:34:04
Messages: 105
Location: ░░▒▒▓▓██
Offline
[Profile] [PM]
- mình xin chia sẽ thêm, thường thì đứng ở vai trò developer , mình hay dùng những kĩ thuật cơ bản như sau để chống sql-injection tuỳ từng trường hợp :
1/ Paramiterize all queries :
- Theo cách này thì khi nhận được malicious code độc hại trong biến thì sql vẫn trả về 1 blank result set và có nghĩa là đoạn mã độc hại nào đó sẽ không bao giờ thực hiện được ( drop table chẳng hạn), hầu hết những ORM như SQLAlchemy đều tự động dùng kĩ thuật này để làm nền tảng chống sql-inj
2/ Use Only Stored Procedures :
- Cách này thì đặc biệt là không cung cấp trực tiếp việc chống lại các cuộc tấn công sql-injection, tuy nhiên nó tăng tính "comprehensive" cho việc phòng thủ, vì vậy nên kết hợp với phương pháp paramiterize input, tuy nhiên nếu store procedure sử dụng 1 dynamic sql thì store vẫn có thể thực hiện 1 malicious code vì vậy phải kết hợp parameterizing luôn đới với dynamic sql thông qua sp_executesql.

3/ Limiting Permissions :
- Cách này sẽ hạn chế quyền người dùng để hạn chế tác hại tới sql
4/Validating Input :
5/ Concealing Error Message :
- Tấn công sql cũng có thể xảy ra từ những thông báo lỗi do server trả về và sẽ là những thông tin hữu ích với attacker nếu họ muốn biết về schema của db.
6/ Limiting Damage bằng các cách như sử dụng encryption/hashfunction tuỳ những trường hợp tương ứng kết hợp Segregate data, auditing and logging...vv
.-/ / )
|/ / /
/.' /
// .---.
/ .--._\ Awesome Season to hack :') Dont you think so? xD
/ `--' /
/ .---'
/ .'
/
[Up] [Print Copy]
  [Discussion]   Giúp về thủ thuật về phòng chống SQL-ịnection 29/01/2012 17:33:01 (+0700) | #15 | 252912
XuanHung_Cntt
Member

[Minus]    0    [Plus]
Joined: 09/01/2009 17:50:35
Messages: 13
Offline
[Profile] [PM]
Hj Bạn, mình không biết nhiều về bảo mật, chỉ biết 1 chút, hy vọng có thể giúp được bạn.
Trong php có rất nhiều hàm hỗ trợ việc escape 1 chuỗi. mình thì hay dùng hàm: addcslashes()
( chi tiết tại http://au2.php.net/addcslashes) để mã hoá dữ liệu trước khi đưa vào câu truy vấn
VD:
Code:
$id=$_REQUEST['id'];
$sql="SELECT * FROM abc_table WHERE id='".addcslashes($id,"'")."'";

ở ví dụ trên mình dùng ký tự ' vì thế mình sẽ escape hết tất cả các ký tự ' trong biến đưa vào query.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|