在开发用户连接其本机数据库登录名的应用程序时,我不需要关心SQL注入权吗?原因是用户可以执行他们想要的任何SQL。 (有些地方管理员执行CREATE LOGIN和CREATE USER语句,这些语句必须动态构建。)我正在谈论LAN上的本地Windows应用程序。使用本机数据库登录/用户时的SQL注入
回答
嘛,SQL注入是执行SQL的可能性,所以用SQL shell访问,为“SQL注入”所需的一切已经授权。但是,如果用户以非管理员身份运行,可能会限制他们可以访问哪些表,并且系统在以更高权限(创建用户等)登录时发送一些其他SQL命令,您仍然需要关心。使用prepared statements作为这样的代码。
如果你的意思是你要构建的网络应用程序,并使用用户的数据库凭据连接到数据库,是的,你确实需要担心SQL注入。
大多数数据库基于对象的限制权限 - 表,视图,存储过程等,所以,用户登录为“鲍勃”可能访问到餐桌“销售”,而不是表“支付”。
数据库不限制对表中的行的访问(例如)。因此,连接为“Bob”的用户可以利用代码中的SQL注入漏洞,可以删除“sales”表中的每条记录。你可能不希望这样。
如果用户“鲍勃”也有直接的SQL访问,他们当然可以,只需运行在SQL命令行语句 - 但通常,Web应用程序都可以在那里直接SQL访问是没有的。您的网络应用程序可能会放在Intranet上,但您无法保证将来不会打开该应用程序。
鉴于它是多么容易防止SQL注入攻击,当你正在构建的应用程序,它是什么一个痛苦的解决这些问题以后,我看不出有什么真正的原因不是为了防止它们摆在首位。
事实上,“SQL注入”是一个常见的误解。
由于无法正确格式他们的查询,人们发明了一个“sql注入”的事情作为借口。
虽然格式正确的查询将成为2种用途一次:
- 它永远是语法正确的,不管发送的是什么数据
- 的副作用将是无懈可击的那臭名昭著的“SQL注入“的东西。
我怀疑你要因为一些意外的符号您的查询失败。所以,不管是什么“注射”,你必须正确地格式化它。但是一旦格式化,无论如何都不会有注入。所以,你必须关注格式,而不是注射。
我也有一种感觉,让用户使用数据库凭证登录不是一个好主意。
有几个命令不接受参数,只接受字符串。 – Monstieur
- 1. 使用Azure AD创建Azure SQL数据库登录/用户
- 2. 用户登录用的数据库
- 3. $ _SESSION登录脚本:未验证用户在SQL数据库
- 4. 当用户登录时使用不同的数据库
- 5. 用户登录时在SQL Server中自动创建数据库
- 6. 登录时使用两个数据库
- 7. 从用户输入创建数据库登录和用户
- 8. 使用本地帐户登录DB2数据库的问题
- 9. 使用正确的登录用户数据时,Ajax登录不会登录
- 10. 用户使用不同帐户登录的数据库方案
- 11. 使用ASP.NET用户帐户登录的外部数据库
- 12. 使用本地SQL数据库登录程序
- 13. 当Laravel用户尝试登录时,写入数据库,成功登录并注销
- 14. 用SQL Server数据库登录Asp.net
- 15. 注册用户到登录数据库 - Web前端?
- 16. Azure v12数据库登录用户
- 17. 隐藏在SQL Server数据库架构的登录/用户
- 18. 从数据库登录的PHP用户不会登录
- 19. 在春天注入登录用户
- 20. 使用Jmeter登录错误的用户登录数据
- 21. 测试本地用户登录数据
- 22. 使用SQL Server 2012作为无登录用户的数据库连接?
- 23. Sql注入登录绕过
- 24. Asp.net登录 - 使用用户数据
- 25. 不使用数据库的登录表单和注册表格
- 26. 使用数据库的PHP用户/管理员登录
- 27. 使用上次登录数据库的MarkLogic用户管理
- 28. 使用php登录mysql数据库的用户更新点
- 29. 使用本地主机应用程序的Google帐户注册/登录
- 30. 用户登录失败。尝试访问SQL Server Express数据库
应用程序将始终与用户自己的帐户连接。用户将处于具有相应权限的角色中。在SQL Server中,动态SQL始终在连接用户的上下文中执行,即使它在过程中。 – Monstieur