2010-03-25 34 views
7

Thiết lập NHibernate Plain-vanilla, ví dụ, không có NHibernate trôi chảy, không có HQL, không có gì ngoại trừ các đối tượng miền và các tệp ánh xạ NHibernate. Tôi tải đối tượng thông qua:SQL Injection với Plain-Vanilla NHibernate

_lightSabers = session.CreateCriteria(typeof(LightSaber)).List<LightSaber>(); 

tôi áp dụng vào sử dụng nguyên liệu trực tiếp đến một tài sản trên lớp "lightsaber":

myLightSaber.NameTag = "Raw malicious text from user"; 

tôi sau đó lưu lightsaber:

session.SaveOrUpdate(myLightSaber); 

Everything I đã thấy nói rằng có, trong tình huống này bạn được miễn dịch với SQL injection, vì cách NHibernate parameterizes và thoát các truy vấn dưới mui xe. Tuy nhiên, tôi cũng là một người mới bắt đầu NHibernate tương đối vì vậy tôi muốn kiểm tra lại.

Cảm ơn!

+0

Tôi không hiểu phần * đề xuất lực * gần cuối. Đó có phải là một trò đùa không? Tôi không hiểu. –

+0

Vâng- xin lỗi. Typo từ một phiên bản khác của Q. Đã bị xóa. –

Trả lời

8

Có, bạn gần như miễn dịch với SQL injection khi sử dụng NHibernate. Nó sử dụng các truy vấn được tham số hóa cho tất cả các câu lệnh SQL được tạo trên tất cả các nền tảng hỗ trợ các câu lệnh này. Tuy nhiên, bạn có thể phá vỡ điều này bằng cách sử dụng SQL tùy chỉnh để chèn/cập nhật hoặc bằng cách thực thi SQL với biến thể của execute_sql của một số sắp xếp hoặc Truy vấn SQL không có tham số.

3

Bạn an toàn miễn là bạn không cắm đầu vào người dùng trực tiếp vào HQL hoặc SQL: không có gì khác (của chức năng hibernate cung cấp) sẽ cho phép người dùng tiêm mã độc.

2

Chỉ để lặp lại những người khác, nếu bạn để NHibernate tạo SQL của bạn thì bạn an toàn, ít nhất là về lý thuyết.

Tuy nhiên, bạn vẫn cần phải cẩn thận với các thủ tục được lưu trữ, trình kích hoạt và chức năng trong cơ sở dữ liệu đặc biệt với SQL động. Mặc dù khách hàng sử dụng các truy vấn parametrized ở khắp mọi nơi, vẫn có thể tiêm.