数据安全防护方案之sql防注入简介
SQL注入是一个参数,用于输入网页的原始URL、表单字段或数据包,通过SQL语句将其连接到web服务器,将其发送到数据库服务器,然后运行数据库命令。例如,如果web应用程序开发人员未过滤或验证用户的输入数据或Cookie而直接向数据库发送,则会执行连接的SQL,并获得数据库信息和权限,从而导致SQL注入攻击。
1、公共SQL连接必须等待参数来确定SQL语句。例如,最常见的字符串连接。
2、从用户中选择count(*),其中密码='a'和用户名='b'或1=1;
3、要编译SQL语句,必须等到传递了username参数。(SQL语句在编译后执行)编译后的SQL有许多选项。这与设计师的意图背道而驰。
4、一些黑客使用SQL注入特权来授予特权。特权旨在通过各种方法和漏洞增加其在服务器上的权限,并控制全局权限。数据库提取权限是通过执行数据库语句、数据库函数等来增加服务器用户的权限。
数据安全防护方案之sql防注入--实施方法
union运算符可以通过将两个或多个select语句的搜索结果集组合成一个结果集来执行搜索。请注意,如果使用联合搜索,它等于主搜索中的列数。1“输入union select DATA()以搜索user():根据MySQL语法,注释稍后将被删除。
1、Database()返回当前站点使用的数据库名称。
2、User()返回执行当前查询的用户名。
3、在相同的上下文中,键入1“共享选择版本()”,然后version@version.txt查询
4、Version()获取当前数据库版本。
5、版本编译操作系统获取当前操作系统。
一、参数化查询:
参数化查询是在需要参数创建查询语句时使用参数占位符,并在查询时提供其参数。
例如,在编译SQL时,从用户中选择count(*),其中password=@PSW和username=@uname将生成编译函数。则“B”或“1=”只能用作用户名参数。搜索名为B或1=1的用户,而不是B=or1=1。相当于阻止。
许多SQL注入都是为了添加查询语句。添加查询语句会更改查询的含义。参数搜索由数据库在搜索语句准备期间编译,如果提供了参数,则再次使用该编译结果。使用注入变量不会改变语义。此外,在上一次展览中,数据库还过滤变量以获得防喷射效果。
二、占位符:
在编写SQL语句时经常使用吗?可以用作占位符。由于可以防止SQL注入,因此显示的内容不会被解释为SQL的关键字。占位符的含义是通过传递参数或设置参数而不是占位符来完成字符串连接的字符串。使用预处理声明方法。SQL被预先编译并替换为占位符。编译后,确保占位符是参数属性。因此,如果用注入代码替换占位符,则无法编译SQL,因此无法达到注入的目的。
三、预编译:
在数据库接受SQL语句后,需要优化语法、语义和SQL语句,并创建执行计划。这需要一些时间。然而,在许多情况下,我们的SQL语句可能会重复执行,每次执行时只有单个值不同。(例如,在咨询值不同的情况下,更新后的集合咨询值不同,插入的值不同)为了减少翻译方法,必须通过上述语法解释,优化句子,准备执行计划,效率明显不高。为了解决上述问题,出现了字典翻译。字典翻译语句是用占位符替换这些语句的值。这可以看作是SQL语句的模板或参数化。我们减少了一次翻译、多次执行和口译优化的过程。
1、预编译角色:
预编译阶段可以优化SQL执行
在大多数情况下,预编译后的SQL可以直接运行,DBMS不需要重新编译。编译的复杂性与复杂的SQL一样大,预编译阶段可以多次集成到一个操作中。提高性能。
2、防止SQL注入
通过预编译,稍后注入的参数将不会执行SQL编译。也就是说,随后注入的参数系统设置为参数,而不是SQL语句。参数或naand不是SQL构造函数。