Người hướng dẫn: Như bạn
đã thấy cho đến nay, việc tiêm SQL rất nguy hiểm.
Ngoài ra, chúng rất dễ (lầm bầm) và rất dễ tìm.
Bạn sẽ tìm thấy chúng ở khắp mọi nơi trong một số trang web thực sự nổi tiếng.
Mọi người cố gắng ngăn chặn những lỗ hổng này bằng cách sử dụng các bộ lọc.
Bộ lọc có thể làm cho nó trông giống như không có khai
thác, nhưng nếu bạn thực sự cố gắng hơn bằng cách sử dụng
mã hóa, các loại mã hóa khác nhau hoặc sử dụng proxy,
thì bạn sẽ có thể bỏ qua hầu hết các bộ lọc này.
Một số lập trình viên sử dụng danh sách đen.
Ví dụ, chúng ngăn chặn việc sử dụng union, chúng ngăn
chặn việc sử dụng insert và những thứ tương tự.
Một lần nữa, nó không an toàn 100%.
Nó có thể được bỏ qua.
Sử dụng danh sách trắng?
Chính xác các vấn đề giống như danh sách đen.
Cách tốt nhất để làm điều đó là lập trình ứng dụng
web của bạn theo cách mà nó không cho phép đưa mã vào nó và sau đó
thực thi.
Cách tốt nhất để làm điều đó là sử dụng câu lệnh được tham
số hóa trong đó dữ liệu và mã được tách biệt.
Cách tốt nhất để cho bạn thấy
ý tôi là sử dụng một ví dụ.
Tôi đang giữ ít lập trình nhất trong ví dụ này.
Tôi không muốn nó trở thành một ví dụ về lập trình.
Thực sự có những sai lầm trong lập trình ở đó, nhưng
tôi đang cố gắng cung cấp cho bạn khái niệm
nhiều hơn là cách lập trình nó.
Mã dễ bị tấn công mà chúng tôi đang xem xét được sử dụng để làm điều này.
Nó được sử dụng để thực hiện chọn * từ các tài khoản có tên người dùng bằng với bất kỳ
thứ gì chúng ta đặt trong hộp văn bản1.
Sau đó, chúng tôi đã sử dụng để đặt trong
textbox1, hãy đặt nó
ở đây, chúng tôi thường nói quản trị, và sau đó
đóng dấu ngoặc kép.
Sau đó, chúng tôi có thể thực hiện lựa chọn hợp nhất và thực thi
một cái gì đó khác.
Sau đó, khi chúng tôi đã hoàn tất, chúng tôi đã sử dụng để
thêm nhận xét, về cơ bản, bỏ qua mọi thứ có sau nó.
Vì vậy, khi bạn sao chép nó và
bạn dán nó vào đây, bạn sẽ thấy
điều gì đang xảy ra.
Bây giờ, chúng ta hãy loại bỏ điều
này vì điều này chỉ làm cho màu sắc không đẹp.
(lầm bầm), thực ra, tôi sẽ chỉ nhận xét về điều này.
Nó sẽ thực hiện một lựa chọn * từ các tài khoản
có tên người dùng bằng admin, liên
minh chọn và thực thi bất cứ điều gì chúng ta muốn làm.
Điều này là rất tồi tệ và rất khó để bảo vệ chống lại.
Như tôi đã nói, bằng cách sử dụng các bộ
lọc và nội dung, chúng tôi sẽ chỉ ẩn vấn đề, chúng tôi sẽ không sửa chữa nó.
Cách tốt nhất để làm điều
này là sử dụng các câu lệnh được tham số hóa giống như vậy.
Đây là cách an toàn để làm điều đó.
Trước hết, bạn chuẩn bị tuyên bố của mình.
Hầu hết các ngôn ngữ như PHP và tất cả chúng,
trên thực tế, chúng đều có một chức năng như vậy.
Bạn có thể chuẩn bị select * từ các tài khoản có
tên người dùng bằng dấu chấm hỏi.
Sau đó, bạn gửi các giá trị.
Vì vậy, PHP bây giờ đã biết.
Câu lệnh SQL được chọn * từ các tài khoản
có tên người dùng bằng một thứ gì đó.
Sau đó, nó sẽ lấy giá trị của textbox1.
Vì vậy, ngay cả khi chúng tôi vào và sử dụng
tuyên bố rất lén lút của chúng tôi
ngay tại đây và dán nó vào
đó, ứng dụng web sẽ biết rằng giá trị cho điều này là lựa
chọn của công đoàn quản trị.
Trên thực tế, nó sẽ cố gắng
truy cập và chọn * từ các tài khoản có tên người dùng,
và sau đó, nó sẽ thêm dấu ngoặc kép của chính
nó và cố gắng tìm một tên người dùng với tên người dùng sau.
Toàn bộ điều này sẽ được thực hiện như vậy.
Vì vậy, nó sẽ được chọn * từ các tài
khoản có tên người dùng bằng với lựa chọn của quản trị viên, thẻ
bắt đầu bằng # này.
Bất cứ thứ gì bạn đặt trong hộp văn bản sẽ được gửi dưới dạng giá trị.
Ứng dụng web sẽ biết rằng đây là một giá trị,
nó không phải là mã và nó sẽ không bao giờ thực thi nó.
Do đó, điều này sẽ bảo vệ bạn chống lại việc tiêm SQL.
Bạn có thể sử dụng các bộ lọc làm tuyến phòng
thủ thứ hai và tôi cũng khuyên bạn nên
sử dụng ít đặc quyền nhất có thể.
Đối với mỗi cơ sở dữ liệu, hãy sử dụng một người dùng
có ít đặc quyền nhất mà họ muốn.
Không cho phép người dùng làm bất cứ điều gì họ muốn.
Nếu đó là một trang web đơn giản chỉ thực hiện lựa chọn, thì
chỉ cho phép người dùng chọn.
Nếu nó chỉ cần chọn và chèn, thì
chỉ cho phép họ chọn và chèn.
Đây là một quy tắc bạn nên tuân thủ với mọi thứ,
ngay cả với hệ thống Linux.
Đảm bảo các quyền luôn ít nhất có thể.
Mỗi người dùng không có bất kỳ quyền bổ sung nào
mà họ không cần.