类的values方法 什么是sql注入?我们常见的提交方式有哪些?
什么是sql注入?我们常见的提交方式有哪些?
什么是SQL注入(SQLi)?SQL注入是一个网络安全漏洞,它使得攻击者能够干扰应用程序 的数据库查询。通常,它允许攻击者查看他们通常无法检索的数据。这可能包括属于其他用户的数据,或者应用程序本身可以访问的任何其他数据。在许多情况下,攻击者可以修改或删除这些数据,从而永久改变应用程序的内容或行为。
在某些情况下,攻击者可以升级SQL注入攻击来破坏底层服务器或其他后端基础设施,或者执行拒绝服务攻击。
成功的SQL注入攻击会产生什么影响?成功的SQL注入攻击可能导致对敏感数据的未经授权的访问,如密码、信用卡详细信息或个人用户信息。近年来,许多惊人的数据泄露是SQL注入攻击的结果,导致声誉受损和监管罚款。在某些情况下,攻击者可以获得一个组织系统的持久性后门,从而导致长期的危害,并且可能在很长时间内不会被发现。
SQL注入的例子将有不同的SQL注入漏洞,攻击和技术在不同的情况下。一些常见的SQL注入示例包括:
检索隐藏数据,您可以在其中修改SQL查询以返回其他结果。
颠覆应用程序逻辑,您可以更改查询来干扰应用程序逻辑。
联合攻击,可以从不同的数据库表中检索数据。
检查数据库,从中可以提取关于数据库版本和结构的信息。
盲SQL注入,你控制的查询结果不会在应用程序的响应中返回。
检索隐藏数据
考虑一个显示不同类别产品的购物应用程序。当用户点击 "礼品及赠品类别,他的浏览器将请求URL:
这使应用程序能够进行SQL查询,从数据库中检索相关产品的详细信息:
从礼品和已发布类别的产品中选择*
该SQL查询要求数据库返回:
所有详细信息(*)
从产品表中
类别是礼物。
并将其发布为1。
这个限制,released 1,用于隐藏未发布的产品。对于未发布的产品,大概是发布0。
该应用程序没有针对SQL注入攻击实施任何防御措施,因此攻击者可以构建以下攻击:
这将导致一个SQL查询:
选择*从产品类别礼品-和发布1
这里的关键点是双破折号序列SQL中的注释指示符——意味着查询的其余部分将被解释为注释。这可以有效地删除查询的其余部分,因此它不再包含和发布1。这意味着它将被显示。所有产品,包括未发布的产品。
此外,攻击者可以让应用程序显示任何类别的所有产品,包括他们不知道的类别。;我不知道:
或者11 -
这将导致一个SQL查询:
从礼品或11类产品中选择*并发布1
修改后的查询将返回所有11个属于礼品类别或1等于1的商品。因为它始终为真,所以查询将返回所有项目。
颠覆应用程序逻辑考虑一个允许用户使用用户名和密码登录的应用程序。如果用户提交用户名wiener和密码bluecheese,应用程序将通过执行以下SQL查询来检查凭据:
SELECT * FROM users,其中用户名wiener和密码bluecheese
如果查询返回用户的详细信息,则登录成功。否则将被拒绝。
在这里,攻击者可以简单地使用SQL注释序列——从WHERE query子句中删除密码检查,并以任何没有密码的用户身份登录。例如,提交用户名administrator -和空白密码将导致以下查询:
SELECT * FROM users其中用户名administrator -和密码
该查询返回名为administrator的用户,并以该用户身份成功登录攻击者。
从其他数据库表中检索数据
如果在应用程序的响应中返回SQL查询的结果,攻击者可以利用SQL注入漏洞从数据库的其他表中检索数据。这是使用UNION关键字完成的,它使您能够执行附加的SELECT查询并将结果追加到原始查询中。
例如,如果应用程序执行以下包含用户输入的查询 "礼品及赠品:
从礼品类别的产品中选择名称和描述
然后,攻击者可以提交输入:
UNION从用户选择用户名和密码-
这将导致应用程序返回所有用户名和密码以及产品名称和描述。
检查数据库在最初确定SQL注入漏洞后,获取一些关于数据库本身的信息通常非常有用。这些信息通常可以为进一步的开发铺平道路。
您可以查询数据库的版本详细信息。实现这一点的方法取决于数据库类型,因此您可以从任何技术推断出数据库类型。例如,在Oracl
sql查询语句中的单引号,双引号,加号是什么意思?
sql查询语句中的单引号和双引号可以用来引用字符串常量,加号可以作为算术加法运算符或者连接符,但是应用到不同的数据库中还是有很多区别的,需要注意。
比如ACCESS数据库和MySQL数据库都支持用单引号或双引号引用字符串常量,而MSSQL数据库只支持用单引号引用字符串常量。
比如ACCESS数据库和MSSQL数据库可以支持数字作为加法运算符或者连接运算符,而MySQL数据库只支持数字进行加法运算,不支持使用连接符。如果要实现字符串连接,必须使用concat函数。
例如:
1)select * from t1 where col 1 ABC;
2)select * from t1 where col 1 ABC;
语句1和2对于Access和MySQL数据库都是合法的。在MSSQL中,只有语句1是合法的,语句2会报错。
3)从t1中选择col1 col2
语句3对于ACCESS和MSSQL数据库,如果两个字段都是数值类型,数据库引擎会做加法,否则会用两个字段的值作为连接符;MySQL只对加号执行算术加法。如果您需要连接多个,字段值需要concat函数,如语句4。
4)从t1中选择concat(col1,col 2);
版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。