我读过调用sp_executesql会让SQL Server容易受到黑客攻击的问题。有没有一种现实的选择可以提供相同的灵活性? (我认为数据库应该只用于存储数据,但是我曾经工作过的任何地方都需要通过数据库进行业务逻辑。)sp_executesql的替代方案
0
A
回答
1
遵循这些准则,您应该没问题; https://msdn.microsoft.com/en-us/library/ff648339.aspx
评论参数的应用程序的使用存储过程 因为使用存储过程与参数不一定 防止SQL注入,你应该检查你的应用程序使用的 这种类型的存储过程。例如,以下 参数化存储过程有几个安全漏洞。
CREATE PROCEDURE dbo.RunQuery @var ntext AS
exec sp_executesql @var GO
使用一个类似于在前面的代码示例的存储过程有 下列漏洞的应用程序:存储的过程执行任何 语句被传递给它。考虑将
@var
变量设置为:DROP TABLE ORDERS;
在这种情况下,ORDERS表将被删除。 存储过程以dbo权限运行。存储过程的名称(RunQuery) 是一个糟糕的选择。如果攻击者能够探测数据库,他或她将看到存储过程的名称。使用名为RunQuery的名称 ,他可以猜测存储过程可能是 以运行提供的查询。
安全的替换方案是用有效的参数
2
sp_executesql
运行存储过程是一样发放动态SQL几乎所有其他的方法是安全的。如果你参数化你的用户提供的输入(例如where
子句和其他参数的值),那么它是相当安全的。如果你不这样做,它可能会对SQL注入攻击开放。没有什么我知道的,这使得sp_executesql
比其他动态sql方法更安全。
请注意,将业务逻辑放入数据库也意味着使用存储过程。这些通常比允许发布任意SQL(即使参数设置正确)容易一些。当然,任何事情都可能实现得很差,并且仍然存在漏洞,但使用存储过程以及最大限度地减少真正动态SQL的使用还有其他好处。
结帐the MSDN article describing how to use parameters with sp_executesql
相关问题
- 1. HTMLElementVariable.animate(...)替代方案?
- 2. Nginx:more_clear_headers替代方案
- 3. VSTO替代方案
- 4. Example.com替代方案
- 5. WSO2替代方案
- 6. 替代方案deleteOnExit
- 7. android.net.wifi.WIFI_HOTSPOT_CLIENTS_CHANGED替代方案
- 8. JOptionPane的替代方案?
- 9. JQuery Slider的替代方案?
- 10. Firebug的替代方案
- 11. Treeview的替代方案
- 12. SELECT .. IN的替代方案(..)
- 13. SendMail的替代方案
- 14. FOP的好替代方案?
- 15. Python的shlex.split替代方案
- 16. iOS3的UILocalNotification替代方案
- 17. Cookie的替代方案
- 18. FontLoader的替代方案computeStringWidth
- 19. 。Perforce的.gitignore替代方案
- 20. uibinder的替代方案I18n
- 21. 替代的解决方案
- 22. numpy.gradient的替代方案
- 23. TYPE_GAME_ROTATION_VECTOR的替代方案
- 24. Java applets的替代方案
- 25. Application Insight的替代方案:
- 26. PHP_excel的替代方案
- 27. WMI的替代方案
- 28. iOS的getUserMedia替代方案
- 29. scipy.stats.norm.pdf的替代方案?
- 30. @GrabConfig的替代方案?
请发布您已阅读的内容的参考。 –
@GordonLinoff https://msdn.microsoft.com/en-us/library/ff648339.aspx – Intern87
@ Intern87。 。 。该问题不是'sp_executesql'。该问题正在执行由用户提供的代码。这只是'sp_executesql'的一小部分。如果使用正确,这并不危险。 –