Tôi đã xem xét một thủ tục lưu trữ cũ ngày hôm nay và nhận thấy nó đang sử dụng quotename
trên các tham số đầu vào. Sau khi thực hiện một số hoạt động đào để tìm ra chính xác điều gì tôi đã xem qua trang web này . Bây giờ tôi đã hiểu những gì nó làm và làm thế nào để sử dụng nó nhưng trang web nói rằng nó được sử dụng như một sự giảm thiểu từ các cuộc tấn công SQL Injection. Khi tôi sử dụng để phát triển các ứng dụng truy vấn trực tiếp cơ sở dữ liệu, sử dụng asp.net, tôi sẽ sử dụng các tham số ADO.Net để chuyển đầu vào của người dùng dưới dạng giá trị bằng chữ và không bao giờ thực sự lo lắng về việc bảo vệ nó trong các thủ tục được lưu trữ của mình.
Bây giờ tôi đang viết một thủ tục được lưu trữ sẽ được sử dụng bởi các ứng dụng mà tôi không viết nên tôi cần phải thử và bảo vệ khỏi các cuộc tấn công tiêm chích ở cấp thủ tục, là quotename
cách tốt nhất để làm điều này hoặc có chức năng mới hơn / tốt hơn phương pháp?
Mã đã đưa tôi vào mẫu suy nghĩ này ( @parm1
là một tham số đầu vào của người dùng):
'SELECT project [Project], project_desc [Description],
customer [Customer], cpnyid [Company]
FROM PJPROJ (nolock)
where project like ' + quotename(@parm1,'''') + '