ITPub博客

首页 > 数据库 > Oracle > SQL中的安全问题 w 夏籽

SQL中的安全问题 w 夏籽

Oracle 作者:beeteam 时间:2014-03-11 20:19:09 0 删除 编辑

   SQL Injection(SQL注入)就是利用某些数据库的外部接口将用户数据插入到实际的数据库操作语言中。产生原因只要是由于程序对用户输入的数据没有进行严格的过滤。

例如:创建数据库后,插入记录,编辑好登录页面,在用户登录数据库时,在url中使用‘or’利用逻辑运算;使用‘/*’‘#’根据MySql特性注释掉后面的语句。这样就可以忽略掉密码等验证信息进入系统。

应用开发中的应对措施:在JAVA、jsp开发中,可以使用PrepareStatement(预编译语句【即preparedstatement ps = connectuon.preparestatement(sql)】)+Bind-variable防止SQL注入;或使用应用程序提供的转换函数;如果现有的转换函数不能满足要求,那么就自己定义函数进行校验,可以利用正则表达式提供一个验证函数来过滤非法符号。

SQL mode

Sql Mode定义了MySql应支持的sql语法、数据校验等,这样可以更容易的在不同环境中使用MySql。

设置不同的Sql mode 可以解决几类问题:完成不同严格程度的数据校验,有效的保障数据准确性;设置模式为ANSI,保证大多数sql语句符合标准语法,这样在不同数据库之间迁移时,不需要对业务sql进行较大修改;在不同数据库之间进行迁移时,设置sql模型可以使mysql上的数据更便捷的迁移到目标数据库。

在非严格模式下,允许插入超过字段长的值,会报警告warning;在严格(传统)模式下则直接报错,错误数据不能插入。

查看sql mode:select @@sql_mode;

修改sql mode:set SESSION|GLOBAL sql_mode=’STRICT_TRANS_TABLES’;(session只在本次连接中生效;global在本次不生效,下次连接生效)。

在insert和update中,在traditional模式,运行MOD(x,0)会出错;在非严格模式下,返回结果为null。

在NO_BACKSLASH_ESCAPES模式中,反斜线为普通字符(其他模式中为转义字符)。

在PIPES_AS_CONCAT模式下,‘||’为字符串连接符,与oracle中相同。

在mysql与其他异构数据库之间有数据迁移的需求,可以灵活组合mysql中的模式,与其他异构数据库模式相匹配,使得导出数据更容易导入目标数据库。

在数据迁移过程中,可以设置sql mode为NO_TABLE_OPTIONS模式,这会去掉show create table 中的‘engine’关键字,获得普通建表脚本。

<!-- 正文结束 -->

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23932445/viewspace-1117536/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
下一篇: 没有了~
请登录后发表评论 登录
全部评论