1.为什么会存在sql注入
现代数据库通常提供API来支持管理,应用程序使用底层开发语言(例如Php、Java、asp或Python)与这些API进行通信。如果直接在SQL语句中执行接口param参数,可能会导致SQL未经授权执行、数据库隐私被盗、数据库被删除等安全风险。
如上图所示,前端传递的参数直接进入SQL执行,存在安全风险。
2.sql注入的安全隐患有哪些
1.可以读取数据库中的库和表
2. 可执行的系统命令
3.可以修改任意文件
4.可能安装了可疑文件
3.如何避免sql注入
登录后复制
限制,
错误:
=
字符串转换
。
一个玩具(
要求
。
查询参数(
参数限制))
//相当于undefined,使用默认值
如果
错误
!=
没有任何{
限制
=
–
1
}
页,
错误:
=
字符串转换
。
一个玩具(
要求
。
查询参数(
参数页))
1.2.3.4.5.6。
例如,在上图中,参数受到严格控制,只允许使用数值。否则,分析将产生错误。对应下面第三项
1、所有查询语句均使用数据库提供的参数化查询接口。参数化语句使用参数而不是在SQL 语句中嵌入用户输入变量。几乎所有的现代数据库系统都提供了参数化的SQL语句执行接口。使用该接口可以有效防止SQL注入。
2. 对输入到数据库中的特殊字符(例如’”\\尖括号*;)进行转义或编码。
3.严格限制变量的类型。例如,使用intval()函数过滤整型变量,数据库中的存储字段必须对应int类型。
4. 较长的SQL注入语句可能无法正确执行,因为必须严格指定数据长度。
5、网站各数据层的编码是统一的,如果上下层的编码不匹配,可能会绕过一些过滤模型。
6. 通过严格限制网站用户的数据库操作权限并仅授予这些用户完成其工作所需的权限,最大限度地减少数据库注入造成的损害。
7、防止您的网站显示类型错误、字段不匹配等SQL错误消息,并防止其他人利用这些错误消息做出决策。
8、我们建议在发布网站之前使用专业的SQL注入检测工具及时检测并修复这些SQL注入漏洞。
4.代码层次如何避免
对传递的参数执行强验证、限制长度、检查SQL 和关键字。下面是关键词过滤。
登录后复制
/**
* 关键字验证
* @参数str
* @返回
*/
受保护的
静止的
布尔值
sql验证(
细绳
str){
//统一转换为小写
斯特
=
斯特
。
toLowerCase();
//过滤的SQL关键字可以手动添加
细绳
坏斯特
=
\’\’|和|执行|执行|插入|选择|删除|更新|计数|删除|*|%|chr|mid|master|截断|\’
+
\’char|declare|sitename|net user|xp_cmdshell|;|or|-|+|,|like\’|and|exec|execute|insert|create|drop|\’
+
\’表|来自|授予|使用|group_concat|列名|\’
+
\’information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|\’
+
\’chr|mid|master|截断|字符|声明|或|;|-|–|+|,|like|//|/|%|#\’;
细绳[]
坏应力
=
坏斯特
。
分裂(
\’\\\\|\’);
为了(
整数
我
=
0;
我
坏应力
。
长度;
我
++){
如果(
斯特
。
指标(
badStrs[
我])
=
0) {
返回
真相;
}
}
1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20。
以上关于#SQL注入解决方案的相关内容摘自网络,仅供参考。相关信息请参见官方公告。
原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92597.html