BÀI TẬP VỀ NHÀ NHĨM 2
1.
2.
3.
4.
5.
TRẦN QUỐC HỒNG- AT150719
HUỲNH HẢI BẰNG- AT150802
ĐINH TRỌNG HÒA- AT150717
PHẠM NGUYỄN TIẾN ANH- AT150702
LÊ ĐỨC THÌN- AT150746
ĐÈ TÀI: DỰ ÁN QUẢN LÝ SINH VIÊN
Phần 1: Xác định kiểu thực thể, kiểu thuộc tính
1. KHĨA HỌC (mã khóa học, tên khóa học, niên khóa)
2. SINH VIÊN (Mã sinh viên, họ và tên, năm sinh, dân tộc, mã lớp, ngun
qn)
3. CHƯƠNG TRÌNH (Mã chương trình, tên chương trình)
4. MƠN HỌC (Mã mơn học, tên mơn học, mã khoa)
5. KẾT QUẢ (Mã sinh viên, Mã môn học, lần thi, điểm)
6. KẾ HOẠCH ĐÀO TẠO(Mã chương trình, Mã khoa, Mã môn học, năm
học, học kỳ, số tiết lý thuyết, số tiết thực hành, số tín chỉ, tên khoa, năm
thành lập)
7. LỚP (Mã lớp, mã khóa học, mã khoa, mã chương trình,STT, GVCN, số
lượng sinh viên)
Phần 2: Xác định kiểu liên kết
Kiểu thực thể
Tên kiểu liên kết/ bản
số
Kiểu thực thể
Sinh viên
Lớp
Lớp
Giảng dạy
Lớp
Khóa học
Lớp
Chương trình
Kết quả
Sinh viên
Kết quả
Mơn học
Kế hoạch đào tạo
Chương trình
Kế hoạch đào tạo
Mơn học
Phần 3 : Chuẩn hóa dữ liệu
Chuyển đổi ERD mở rộng về ERD kinh điển
Chuyển đổi ERD kinh điển về ERD hạn chế.
Chuyển đổi ERD hạn chế về MH quan hệ
Phần 4 : Bảng đặc tả dữ liệu
KHOAHOC
Khóa
chính
X
Khóa
ngồi
Tên trường
maKH
tenKH
Kiểu dữ liệu
char(10)
nvarchar(25)
nienKhoa
Char (11)
Tên trường
maSV
hoten
namsinh
Kiểu dữ liệu
char(10)
nvarchar(25)
Char(4)
maLop
dantoc
nguyenquan
char(5)
nvarchar(7)
nvarchar(50)
Khóa
ngồi
Tên trường
Kiểu dữ liệu
X
X
X
maLop
maKhoa
maKH
maCT
STT
char(5)
char(10)
char(10)
char(10)
tinyint
6
GVCN
nvarchar(25)
7
soLuongSV
tinyint
STT
1
2
3
Diễn giải
Mã quản lý khóa học
Tên đầy đủ của khóa
Năm bắt đầu - năm kết
thúc
SINHVIEN
STT
1
2
3
Khóa
chính
X
4
5
6
Khóa
ngồi
X
Diễn giải
Mã quản lý sinh viên
Họ tên sinh viên
Năm sinh
Mã quản lý lớp của sinh
viên
Dân tộc
Ngun qn
LOP
STT
1
2
3
4
5
Khóa
chính
X
Diễn giải
Mã quản lý lớp của
sinh viên
Mã khoa mà lớp thuộc
Mã khoá học
Mã chương trình học
STT của các lớp
Giáo viên phụ trách
chủnhiệm
số lượng sinh viên
trong lớp
KHDT
STT
1
2
3
4
5
6
7
8
Khóa
chính
Khóa
ngồi
X
X
X
Tên trường
maCT
maKhoa
maMH
namhoc
soTietLT
soTietTH
hocki
soTC
Kiểu dữ liệu
char(10)
char(10)
char(10)
Char(4)
tinyint
tinyint
tinyint
tinyint
Diễn giải
Mã chương trình học
Mã khoa mà lớp thuộc
Mã môn học
năm học
Số tiết lý thuyết
Số tiết thực hành
học kì trong năm học
số tín chỉ của mơn học
KETQUA
STT
1
2
Khóa
chính
X
X
Khóa
ngồi
X
X
Tên
trường
maSV
maMH
Kiểu dữ
liệu
char(10)
char(10)
Diễn giải
Mã sinh viên
Mã mơn thi
CT_KHDT
STT
1
2
3
Khóa
chính
X
Khóa
ngồi
Tên trường
maKhoa
tenKhoa
namThanhlap
Kiểu dữ liệu
char(10)
nvarchar(50)
Char(4)
Diễn giải
Mã của khoa
Tên đầy đủ của khoa
Năm thành lập khoa
Tên trường
maCT
Kiểu dữ liệu
char(10)
tenCT
nvarchar(40)
Diễn giải
Mã chương trình học
Tên đầy đủ của
chương trình
CHUONGTRINH
STT
1
2
Khóa
chính
X
Khóa
ngồi
MONHOC
Khóa
chính
X
Khóa
ngồi
Tên trường
maMH
Kiểu dữ liệu
char(10)
2
tenMH
nvarchar(25)
3
maKhoa
char(10)
Diễn giải
Mã mơn học
Tên đầy đủ của môn
học
Mã khoa giảng dạy
môn học
Tên trường
Kiểu dữ liệu
Diễn giải
maMH
Diem
lanthi
char(10)
float
tinyint
Mã môn học
điểm mơn thi
lần thi
STT
1
CT_KETQUA
STT
1
2
3
Khóa
chính
X
Khóa
ngồi
Phần 5 Áp dụng mơ hình DAC và MAC vào CSDL
Mơ hình DAC
Create các lớp user HIEUTRUONG, HIEUPHO,
GIAOVIEN, SINHVIEN
mơ hình MAC
Object
Hiệu trưởng
Hiệu phó
Giáo viên
Sinh viên
Mức độ nhạy cảm
TS
TS
S
C
Subject
KHOAHOC
SINHVIEN
LOP
KHDT
CT_KHDT
CT_KETQUA
KETQUA
CHUONGTRINH
MONHOC
Mức độ nhạy cảm
C
C
C
TS
C
C
TS
S
C
Phần 6: Áp dụng an toàn DBMS
Kiến trúc Woods Hole
Các kiến trúc Woods Hole sử dụng DBMS không tin cậy cùng với một
bộ lọc tin cậy và không quan tâm đến OS có tin cậy hay khơng.
-Phần mềm front ends và DBMS đều khơng tin cậy (Khơng quan tâm
OS có tin cậy hay không)
-Phần mềm untrusted front-end thực hiện các công việc xử lý trước và
sau các câu truy vấn (phân tích, tối ưu hóa, phép chiếu).
-Phần mềm trusted front end (TFE) ở giữa thực thi các chức năng an
toàn và bảo vệ nhiều mức, vì vậy hoạt động như một TCB (Trusted
Computing Base).
Kiến trúc Integrity Lock
-Khố tồn vẹn được đề xuất lần đầu tiên tại Viện nghiên cứu của Lực
lượng Không quân về An toàn cơ sở dữ liệu [AF83], được dùng để kiểm
sốt tính tồn vẹn và sự truy nhập cho cơ sở dữ liệu.
-Kiến trúc Integrity lock đã có trong hệ quản trị thương mại TRUDATA.
Đặc điểm:
-TFE thực thi bảo vệ nhiều mức bằng cách gắn các nhãn an toàn vào các
đối tượng CSDL dưới dạng các tem – Stamps.
-Một tem là một trường đặc biệt của một đối tượng, lưu thơng tin về
nhãn an tồn và các dữ liệu điều khiển liên quan khác.
-Tem là dạng mã hóa của các thông tin trên, sử dụng một kỹ thuật niêm
phong mật mã gọi là Integrity Lock.
Mức độ
nhạy cảm
Hiệu trưởng TS
Hiệu phó
TS
Giáo viên
S
Sinh viên
C
Object
-TFE có nhiệm vụ tạo và kiểm tra các tem.
-TFE sử dụng mật mã khóa bí mật để tạo tem và giải mã các tem. Các
tem này có thể tạo ra dựa vào tổng kiểm tra (checksum).
-Khóa bí mật chỉ có TFE biết.
•Insert dữ liệu: khi người dùng muốn insert một mục dữ liệu, TFE sẽ
tính:
–Tổng kiểm tra = mức nhạy cảm dữ liệu + dữ liệu.
–Mã hoá tổng kiểm tra này bằng một khố bí mật K, tạo ra tem, và lưu
vào trong CSDL cùng với mục dữ liệu đó (gắn với mục dữ liệu).
•Đưa ra dữ liệu: Khi đưa ra dữ liệu trả cho người dùng, TFE nhận được
dữ liệu từ DBMS khơng tin cậy, nó sẽ kiểm tra tem gắn với mục dữ liệu
xem có chính xác không:
–Giải mã tem gắn với dữ liệu.
–So sánh dữ liệu nhận được với dữ liệu sau khi giải mã tem. Nếu không
khớp chứng tỏ dữ liệu đã bị sửa đổi.
–Lưu ý: nếu dùng hàm băm để tạo tem, thì sau khi DBMS nhận được dữ
liệu và tem tương ứng, nó sẽ băm dữ liệu này ra và so sánh với tem nhận
được xem có trung nhau khơng.
Kiến trúc Kernelized
-Sử dụng một OS tin cậy, có trách nhiệm đối với các truy nhập vật lý
vào dữ liệu (trong CSDL) và có trách nhiệm tuân theo bảo vệ bắt buộc.
-High User (người dùng làm việc ở mức cao) tương tác với một High
DBMS, thông qua một TFE, Low User (người dùng làm việc ở mức
thấp) tương tác với một Low DBMS cũng thơng qua một TFE.
-Sau đó, các u cầu của họ được chuyển cho OS, và OS lấy lại dữ liệu
hợp lệ từ CSDL.
-Đã có trong mẫu thử Sea View và trong hệ quản trị thương mại Oracle.
-Q trình khơi phục: được thực hiện khi OS cần lấy lại dữ liệu được lưu
giữ trên các đối tượng của nó để trả về cho người dùng. Để từ các quan
hệ đơn mức, sinh ra một khung nhìn đa mức chỉ chứa các dữ liệu mà
người dùng yêu cầu,
-Quá trình phân tách: thực hiện chuyển đổi một quan hệ đa mức (đối
tượng CSDL) thành một số quan hệ đơn mức, (chỉ chứa dữ liệu ở một
mức an tồn nào đó), được lưu giữ trong các đối tượng OS.
-Các đối tượng (có các nhãn an tồn giống nhau) của CSDL được lưu
giữ trong các đối tượng của OS tin cậy. Vì vậy, OS tin cậy tiến hành
kiểm sốt an tồn trên các đối tượng lưu giữ này, cần có các q trình
phân tách và khơi phục quan hệ nhiều mức.
Kiến trúc Replicated
-Có trong mẫu thử NRL, nhưng chưa có trong DBMS thương mại nào,
vì nó rất đắt!
-Người dùng mức cao có thể xem và sửa đổi cả dữ liệu mức thấp và mức
cao.
-Để tuân theo giải pháp này cần có các thuật tốn đồng bộ an tồn để
đảm bảo tính tương thích lặp và chi phí lặp cũng rất lớn.
-Dữ liệu mức thấp được lặp trong CSDL.
Phần 7: Áp dụng an toàn ứng dụng vào cơ sở dữ liệu.
VẤN ĐỀ QUẢN LÝ TẢI KHOẢN VÀ MẬT KHẨU NGƯỜI DÙNG
1. Lỗ hổng trong quản lý mật khẩu cơ sở dữ liệu.
Mơ hình an tồn cơ sở dữ liệu dựa trên các tiến trình xác thực và phân
quyền. Mỗi cơ sở dữ liệu duy trì danh sách các định danh của người
dùng, mỗi khi người dùng truy nhập vào cơ sở dữ liệu, tên và mật khẩu
trong danh sách định danh sẽ được sử dụng để xác thực. Sau khi q
trình xác thực đã thành cơng, cơ sở dữ liệu sẽ xác định tập các quyền mà
người dùng được phép thực hiện trên cơ sở dữ liệu.
Vì vậy, một điều hiển nhiên là để đáp ứng được yêu cầu mơ hình an tồn
đặt ra, tên và người dùng phải được quản lý một cách an toàn, nếu điều
này khơng được thực hiện tốt thì tồn bộ mơ hình sẽ trở nên vô nghĩa.
Quy ước đặt tên
-
Viết hoa chữ cái đầu
-
Loại bỏ dấu, ký tự đặc biệt như: ‘:’, ‘--‘, ‘/’, ...
-
Đặt theo dạng số ít
Để bảo vệ thì trước tiên chúng ta phải có một mật khẩu hiệu quả .Mật
khẩu được xem là một mật khẩu hiệu quả thì rất khó xâm phạm, thường
có các đặc điểm sau:
- Thay đổi mật khẩu thường xuyên, ít nhất sáu tháng mỗi lần.
- Tránh những từ liên quan đến bản thân, chẳng hạn như tên, ngày tháng
năm sinh, nơi sinh, địa chỉ.
- Chứa ít nhất 8 kí tự, kết hợp các kí tự số, các kí tự chữ (chữ hoa và chữ
thường) và các kí đặc biệt, tránh sử dụng các từ chung (tên, chữ của
người khác mà có thể được tìm thấy trong từ điển)
Lỗ hổng này đề cập đến vấn đề tên và mật khẩu của cơ sở dữ liệu được
sử dụng và lưu trữ khơng an tồn. Có nhiều ngun nhân dẫn đến lỗ
hổng này, trong đó một ngun nhân chính là tên và mật khẩu được lưu
trữ dưới dạng rõ trong tệp cấu hình. Dẫn đến kẻ tấn cơng có thể lợi dụng
để làm hại đến các tài nguyên của máy chủ ứng dụng, hoặc có thể đạt
được việc truy nhập vào cơ sở dữ liệu một cách hợp pháp. Đây là một lỗ
hổng bảo mật nghiêm trọng vì định danh được sử dụng bằng ứng dụng
để truy nhập vào trong cơ sở dữ liệu thường có tồn quyền đối với lược
đồ cơ sở dữ liệu thậm trí là tồn quyền với cơ sở dữ liệu.
Tên nhân viên
Trần Quốc
Hồng
Đinh Trọng Hịa
Phạm Nguyễn
Tiến Anh
Huỳnh Hải
Bằng
Lê Đức Thìn
Chức vụ
Hiệu trưởng
User
Tqh001
Password
Tqh123@tqh
Hiệu phó
Hiệu phó
Dth002
Pnta003
Dth789@dth
Pnta789@pnta
Giáo viên
Hhb004
Hhb456@hhb
Sinh viên
Ldt005
Ldh9834@9834
Để bảo mật tài khoản của người dùng thì ta dùng mật khẩu mã hóa
(encrypted_password)
ở đây dùng mã hố md5 + salt được tạo ngẫu nhiên
Password được mã hoá như sau hash (password +salt)
Tên nhân
viên
Trần
Quốc
Hồng
Đinh
Trọng
Hịa
Chức User
vụ
Hiệu Tqh001
trưởng
Password_encrypted
Hiệu
phó
dec0d40cd3936ebeb5ae08cc04e4fa7a
Dth002
b37c549273ff9cbd958bc000b3480ffd
Phạm
Nguyễn
Tiến Anh
Huỳnh
Hải Bằng
Lê Đức
Thìn
Hiệu
phó
Pnta003 6abd6a7d4266b2115156b67d35662e65
Giáo
viên
Sinh
viên
Hhb004
227dbffebc98efbcf179614d8ba89b98
Ldt005
5bdbb31533e5797ce9015efe8ec74d24
1.2 KIỂM SỐT TRUY CẬP VÀO CƠ SỞ DỮ LIỆU.
Bước đầu tiên trong việc giải quyết các lỗ hổng bảo mật về mật khẩu
CSDL là giám sát xem ai đang truy nhập vào dữ liệu. Bắt đầu bằng việc
tạo báo cáo về các tải khoản nào đang hoạt động, tài khoản đó đang dùng
địa chỉ IP nào kết nối tới CSDL, và ứng dụng nào được dùng để truy nhập
vào CSDL.
Một tùy chọn thêm để tăng cường an tồn là sử dụng tường lửa, như trong
hình 4.3, tại đây có hai lựa chọn: (1) sử dụng tường lửa tiêu chuẩn, cho
phép thực hiện kiểm soát truy nhập dựa trên IP và Port; (2) sử dụng tường
lửa SQL, cho phép việc xây dựng các tập luật không chỉ dựa trên IP mà
còn dựa trên tên truy nhập, ứng dụng truy nhập, đối tượng CSDL được
truy nhập. Nó cũng cho phép xác định chính xác tài khoản nào hay ứng
dụng nào, máy tính nào được phép truy nhập vào CSDL.
Ngồi ra chúng ta có thể kết hợp sử dụng thêm một phần mềm cảnh báo
thời gian thực khi có bất kỳ vi phạm an ninh nào. Kẻ tấn cơng có thể cố
gắng kết nối tới CSDL từ máy tính của nó, và khi khơng thể kết nối được
do bị tường lửa SQL chặn thì nó có thể đốn rằng địa chỉ IP của đang bị
chặn(đang có một thiết bị giám sát an ninh tầng 3), nó có thể quay ra thực
hiện tấn công từ các máy chủ ứng dụng, hoặc có thể giả mạo địa chỉ IP
của máy chủ ứng dụng thành địa chỉ IP của máy mình và tiếp tục tấn công,
q trình lọc có thể mất thêm thời gian, tuy nhiên nếu việc lọc được thực
hiện sử dụng phần mềm cảnh báo thời gian thực thì có thể chặn cuộc tấn
cơng từ sớm, trước khi kẻ tấn cơng tìm mọi cách để vượt qua các hàng rào
bảo vệ.
Tên nhân viên
Trần Quốc Hồng
Đinh Trọng Hịa
Phạm Nguyễn Tiến
Anh
Huỳnh Hải Bằng
Lê Đức Thìn
Chức vụ
Hiệu trưởng
Hiệu phó
Hiệu phó
Ip máy tính
192.168.50.2
192.168.50.3
192.168.50.4
Giáo viên
Sinh viên
192.168.50.5
192.168.50.6
Sử dụng Firewall bằng cách kiểm tra các packet đến và so sánh chúng với
một bộ rules. Nếu packet đáp ứng các tiêu chuẩn được quy định bởi các
rules, thì Firewall sẽ chuyển packet đến TCP / IP protocol để xử lý bổ
sung. Nếu packet không đáp ứng các tiêu chuẩn được chỉ định bởi các
rules, thì Firewall sẽ loại bỏ packet đó. Ngoài ra, logging được bật,
firewall sẽ tạo một mục nhập trong file logging của Firewall.
Danh sách lưu lượng được cho phép theo một trong những cách sau:
Tự động: Khi Firewall được kích hoạt, Firewall sẽ tạo một danh sách để
phản hồi “allowed” (cho phép). Phản hồi này được xem là solicited traffic
và khơng có gì cần phải cấu hình.
Theo cách thủ cơng: Admin cấu hình các rules cho Firewall. Điều này
Cho phép truy cập vào các chương trình hoặc các port được chỉ định trên
máy tính của bạn. Trong trường hợp này, máy tính chấp nhận unsolicited
traffic khi hoạt động như một server, một listener, hoặc một peer. Đây là
loại cấu hình phải được hoàn thành để kết nối với SQL Server.
XÁO TRỘN MÃ ỨNG DỤNG.
Phân tích điểm yếu mã nguồn và giả mã
Trong nhiều môi trường ứng dụng hiện đại ngày nay, một số mã được đặt trong
định dạng mã nguồn hoặc trong định dạng mà có thể dễ dàng được sử dụng cũng
như dễ dàng lấy được. Và từ đó kẻ tấn cơng có thể có được rất nhiều thơng tin về
các hoạt động bên trong của ứng dụng (đây cũng là một vi phạm về quyền sở hữu trí
tuệ, nhưng khơng được đề cập đến trong chương này). Một kẻ tấn cơng có thể tìm
hiểu các cách thức kết nối trong ứng dụng với CSDL, hay làm thế nào tên tài khoản
được mã hóa, cũng như các câu truy vấn tới CSDL mà ứng dụng sử dụng là gì. Mã
nguồn cũng có thể bị kẻ tấn cơng phân tích để tìm ra những lỗ hổng trong ứng dụng.
Một vấn đề khác về mã bảo vệ liên quan đến mã giả hoặc định dạng trung gian.
Cả hai môi trường Java và Microsft .Net đểu dựa trên một máy ảo (VM) mẫu, trong
đó mã nguồn được biên dịch thành một định dạng trung gian (hay cịn gọi là mã giả)
mà sau đó được sử dụng bởi các máy ảo để chạy ứng dụng. Định dạng trung gian
này bao gồm các hướng dẫn, chỉ thị cụ thể đối với máy ảo, máy ảo thực hiện những
chỉ thị này và đôi khi biên dịch chúng thành mã máy (code on-the-fly / just in time
complie). Lợi thế của kiến trúc này là tính di động và khả năng tương tác tốt. Ví dụ
trong mơi trường Java nó cho phép một chương trình chạy trên một hệ điều hành có
cài máy ảo Java (JVM - java virtual machine) mà không cần phải sửa đổi hay biên
dịch lại code. Các lớp (class) trong Java được biên dịch thành các file .class chứa
các bytecode, chỉ thị, điều khiển máy ảo java (JVM) . Nền tảng .Net thực hiện các
tương tác với Microsoft, trong đó nhiều ngơn ngữ lập trình có thể tương tác tốt và
chia sẻ các tập lệnh dễ dàng bởi tất cả đều được biên dịch theo một định dạng chung
trên một cơ sở chung. Cơ sở chung này được gọi là Common Library Runtime(CLR),
và các định dạng trung gian trong đó tất cả các chương trình được biên dịch được
gọi là Common Intermediate Language(CIL). Định dạng CIL bao gồm siêu dữ liệu
(metadata) có thể đọc hiểu code và cung cấp nhiều thơng tin có giá trị cho hacker.
Trong khi máy ảo và mã giả rất thuận tiện cho việc phát triển và đơn giản hóa việc
triển khai phần mềm, thì chính nó cũng là phần dễ bị tổn thương. Mã giả gồm
những tập lệnh chỉ thị ở mức máy ảo, và máy ảo chạy như một phần mềm thơng
dịch, nó chuyển dịch mã nguồn của một ngơn ngữ lập trình thành các lệnh cho máy
tính thực hiện tính tốn, bởi vì những tập lệnh này rất thông dụng, kẻ tấn công đã
xây dựng các chương trình gọi là phần mềm ăn cắp mã giả. Các chương trình này
đọc biên soạn mã giả và tạo ra mã nguồn. Mã nguồn này gần chính xác như mã
gốc.
Khắc phục vấn đề tấn công khai thác lỗ hổng dựa trên phân tích mã nguồn.
để hạn chế các tấn cơng khai thác lỗ hổng dựa trên phân tích mã nguồn
là sử dụng các kỹ thuật mã hóa ứng dụng gồm:
-Mã hóa giao diện:
Bao gồm làm xáo trộn các nhận dạng, loại bỏ các chú thích câu lệnh, và
đảo vị trí các method.
-Mã hóa dữ liệu:
Ảnh hưởng tới cấu trúc dữ liệu và mã hóa dữ liệu. Ví dụ: một mảng hai
chiều có thể được chuyển thành mảng một chiều và trải rộng.
int i=1;
while (i < 100) {
.. arr[i] ..
i++
}
Đoạn mã trên có thể được chuyển về dạng như sau:
..
int i = 7;
..
int j = i + 4;
while (j < 8003) {
.. arr[(j-3)/(i+1)] ..;
j += (i+1);
}
Kiểm soát mã mã hóa bao gồm các kỹ thuật sắp xếp lại, hay bổ
sung các câu lệnh không liên quan.
Thêm đoạn mã giúp chống lại việc biên dịch ngược. Ví dụ, trong
nhiều năm, ứng dụng phổ biến nhất dùng cho việc dịch ngược mã Java là
phần mềm freeware tên là Mocha. Một trình mã hóa giả được tạo ra gọi
là HoseMocha đã gắn thêm các lệnh giả chống lại việc dịch ngược, mà
không làm ảnh hưởng đến việc thực thi chương trình.
Cú pháp mã hóa:
AES_ENCRYPT(chuoi_can_ma_hoa, KEY_SECRET);
Cú pháp giải mã:
AES_DECRYPT(ten_column, KEY_SECRET);
KEY_SECRET ở đây là một khóa dùng để mã hóa và giải mã, chúng ta
cần tránh để lộ khóa này.
Ví dụ:
INSERT into SinhVien (MaSV, HoTenSV) VALUES (AES_ENCRYPT('SV001',
'secret'), AES_ENCRYPT('Tran Quoc Hoang', 'secret'));
TẤN CÔNG SQL INJECTION.
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 tồn trên web, đây là 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.
Có thể gây ra những thiệt hại khổng lồ. Với SQL Injection, hacker có thể
truy cập một phần hoặc toàn bộ dữ liệu trong hệ thống.
Lỗ hổng này rất nổi tiếng, từ developer đến hacker gần như ai cũng biết.
Ngồi ra, cịn có 1 số tool tấn công SQL Injection cho dân “ngoại đạo”,
những người khơng biết gì về lập trình.
Dễ tấn cơng, phổ biến, gây ra hậu quả nghiêm trọng, đó là lý dó Inject
(Khơng chỉ SQL mà OS và LDAP) nằm chễm chễ ở vị trí đầu bảng trong
top 10 lỗ hỗng bảo mật của OWASP.
Cơ chế SQL Injection vô cùng đơn giản. Ta thường sử dụng câu lệnh SQL
để truy cập dữ liệu. Giả sử, muốn tìm đăng nhập user, ta thường viết code
như sau:
var username = request.username; // Tqh001
var password = request.password; // Tqh123@123
var sql = "SELECT * FROM Users WHERE Username = '" + username
+ "' AND Password = '" + password + "'";
// SELECT * FROM Users WHERE Username = ' Tqh001' AND
Password = ' Tqh123@123'
Đoạn code trên đọc thông tin nhập vào từ user và cộng chuỗi để thành
câu lệnh SQL. Để thực hiện tấn công, Hacker có thể thay đổi thơng tin
nhập vào, từ đó thay đổi câu lệnh SQL .
var password = request.password; // ' OR '' = ''
var sql = "SELECT * FROM Users WHERE Username = '" + username
+ "' AND Password = '" + password + "'";
// SELECT * FROM Users WHERE Username = ' Tqh001' AND
Password = '' OR '' = ''
Hacker có thể thơng qua SQL Injection để dị tìm cấu trúc dữ liệu (Gồm
những table nào, có những column gì), sau đó bắt đầu khai thác dữ liệu
bằng cách sử dụng các câu lệnh như UNION, SELECT TOP 1…
Cách phòng chống SQL Injection:
Hiện nay có một số hướng dẫn tốt để tránh lỗi SQL injection cho các nhà
phát triển ứng dụng chẳng hạn như:
•
Tất cả các dữ liệu được nhập vào bởi người dùng phải được lọc, loại
bỏ tất cả các ký tự hoặc các chuỗi không phải là một phần của biểu thức
đầu vào, và tất cả các trường nhập vào đều phải được xác nhận.
•
Các lệnh SQL được sử dụng để truy nhập cơ sử dữ liệu từ mã lệnh
trong phần mềm ứng dụng không được tạo ra bằng cách sử dụng các chuỗi
ghép nối.
•
Các tham số có kiểu mạnh (thường kết hợp với các Store procedure)
phải được sử dụng bất kỳ nơi nào có thể.
•
Việc đăng nhập vào ứng dụng phải sử dụng một Store procedure
chức năng được thực hiện với một Store procedure xác nhận tốt.
•
Dữ liệu nhập vào của tất cả người dùng phải được cho vào trong dấu
ngoặc kép, kể cả dữ liệu số.