SQL注入
什么是SQL注入?
是指web应用程序对用户输入的数据的合法性没有判断或者没有严格的过滤,攻击者可以在web程序中把定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息
就是使用某种手段,在原来的SQL语句基础上,添加一段恶意的SQL语句并执行,从而达到不被管理员允许的目的
怎么防御?
建议在代码中对数字类型的参数先进行数字类型变换,然后再代入到SQL查询 语句中,这样任何注入行为都不能成功。井且考虑过滤一些参数,比如get参数和 post参数中对于SOL语言查询的部分。
-
内容过滤
-
字符转义,把一些特殊转义,比如PHP配置文件里的magic_quotes_gpc=On
-
杜绝SQL拼接
预编译 prepare statement
-
封装错误信息,不要给用户提供任何数据库错误信息
-
数据库权限控制
-
数据库定义,定义的复杂些
-
数据加密,不要明文存储数据
-
web应用防火墙,WAF
过滤特殊字符
所以防范的时候需要对用户的输入进行检查.
特别式一些特殊字符,比如单 引号,双引号,分号,逗号,冒号,连接号等进行转换或者过建.以下为需过滤 的敏感字符或者语句:
【1】net user
【2】xp_c«ndshel I
【3】add
【4】xec master.(fco. xp_cmdshelI
【5】net I oca Igroup administrators
【6】□select
【7】count
【8】Asc
【9】char
【10】mid
【11】%
【12】,
【13】:
【14】-
【15】 insert
【16】 delete from
【17】 drop table
【18】 update
【19】truncate
【20】 from
修改php.in
修改PHP中默认配置文件php.ini中的配置,来降低sql注入的风险
safe_mode = on //开启安全模式
magic_quotes_gpc = On 〃开启过建函数
display_errors = Off 〃禁止错误信息提示 注:JBnagic_auotes_gpc选项打开,在这种情况下所有的客户端GET和POST 的数据都会自动进行addslashes处理,所以此时对字符串值的SQL注入是 不可行的,但要防止对数字值的SQL注入,如用intvalO等函数进行处理。 但如果你编写的是通用软件,则需要读取服务器的magic_Quotes_gpc后进行相应处理。
使用mysqli_real_escape_string()函数
对于MySQL用户,可以使用函数mysqli_real_escape_string():转义在 SQL 语句中使用的字符串中的特殊字符
加固数据库方面
1、 不要以sysadmin的身份连接数据库.而是使用特定的数据库用户,只具有读取,写入和更新数据库中适当数据的适当特权。此帐户定期检查, 确定它所具有的特权.
2、 以安全的方式创建SQL。让数据库来完成创建SQL的工作,而不是在代码 中完成。使用参数化SQL语句,同时也能提高查询的效率.
3、 保证数据库用户连接信息非明文保存.
加固管理方面
1.加强编程人员良好的安全编码意识,系统地学习安全编码的知识,减少 源代码泄鸯的风险。
2.建立起良好的代码审核、审查体系.由专人负责代码的审计,增加安全 监督环节。
Mybatis
【1】预编译
【2】like
1.MySQL
2.Oracle
3.sql server
【3】in
防火墙
XSS
什么是XSS?
SS作为OWASP TOP 10 之一
XSS被称为跨站脚本攻击(Cross-