2012-11-19 35 views
22

Tôi vừa gặp một nhà phát triển đã thêm vào trước mỗi bảng và tên cột trong cơ sở dữ liệu MYSQL của mình bằng dấu gạch dưới (ví dụ: _users, _name, _active). Khi tôi đặt câu hỏi về thực tế, ông nói rằng điều này giúp ngăn chặn các cuộc tấn công SQL injection - tôi chưa bao giờ đi qua thực hành/lời khuyên này trước đây. Nó giúp ngăn chặn các cuộc tấn công SQL injection như thế nào?Làm cho bảng cơ sở dữ liệu SQL khó đoán và tên cột giúp ngăn chặn việc tiêm SQL?

+0

Điều duy nhất tôi có thể nghĩ rằng nó sẽ giúp chống lại là nếu kẻ tấn công đang cố gắng đoán tên bảng. Nhưng với vệ sinh thích hợp của các đầu vào cơ sở dữ liệu, nó hoàn toàn không cần thiết. Tất cả nó sẽ làm là gây nhầm lẫn devs của bạn. – Travesty3

+4

Hy vọng bạn sẽ chia sẻ trang này với anh ấy. – MikeSmithDev

+4

Paranoid Dev? Có thể, có thể không. Dev không chịu thua? Rất có khả năng. – MatBailie

Trả lời

29

No.

Suy nghĩ của anh ấy "Nếu kẻ tấn công không biết tên bảng của tôi thì kẻ tấn công không thể gây rối với họ". Tuy nhiên, bạn vẫn dễ bị tấn công SQL injection, và kẻ tấn công vẫn có thể gây ra các cuộc gọi hệ thống tùy ý, có lẽ là các bảng hệ thống nổi tiếng. Điều gì nếu anh ta thêm một số mã SQL gây ra các truy vấn rất dài đối với một bảng hệ thống mà bogs xuống máy chủ của bạn?

Bảo mật thông qua sự tối tăm là hoàn toàn không có bảo mật.

+6

+1 để đề cập đến các bảng hệ thống. Nếu kẻ tấn công không biết tên của con chó con của bạn là gì, nhưng có thể xóa hoặc làm hỏng toàn bộ cơ sở dữ liệu của bạn, điều đó có quan trọng không? (Ok, đối với thông tin nhạy cảm, như thông tin thẻ ngân hàng, nó có thể ...). Chưa kể, bằng cách truy vấn siêu dữ liệu, người ta có thể dễ dàng giải mã lược đồ _clever_ này ... – ppeterka

+0

Cảm ơn bạn đã làm rõ Andy (và báo giá apt). Tôi đã không nghĩ đến các bảng hệ thống! – foiseworth

+0

Cũng đáng để chỉ ra rằng việc đổi tên các bảng từ 'user' thành' _user' không phải là một thay đổi rất khó cho kẻ tấn công để thử, đặc biệt là vì kẻ tấn công có lẽ là một chương trình chứ không phải con người. Nó có ý nghĩa như thay đổi mật khẩu của bạn từ 'password' thành' passw0rd' và suy nghĩ "No attacker will know!" –

4

_this, _ đây không có liên quan đến an ninh, với điều đó nó có thể được dễ bị tổn thương

Tốt đọc

Best way to prevent SQL injection?

+1

+1 để liên kết câu trả lời tuyệt vời này. – BernaMariano

Các vấn đề liên quan