cas本身有做mybatis防止sql注入入的机制么

旧项目有很多地方用了SQL拼接,请问有什么方法可以防止SQL注入的问题? - ITeye问答
公司的一个旧项目中有很多用了SQL拼接的方式。
注入问题由此而生,请问有没有什么方法可以解决这些问题呢?
如果都改成用PreparedStatement防止SQL注入的话工作量是很庞大。
不知道有没有什么可以从底层接替数据库操作的组件来解决这个历史遗留问题。
问题补充:过滤有个坏处就是地方比如“OR”、“'”这些都是比较常用的。一个URL包括from就被拦截了。
个人认为最好的办法就是改程序,如果非法字符过滤,麻烦不说,如果用户输入的数据就有你所谓的非法字符的话,将是很难处理的。
SQL注入是目前比较常见的针对数据库的一种攻击方式。在这种攻击方式中,攻击者会将一些恶意代码插入到字符串中。然后会通过各种手段将该字符串传递到SQLServer数据库的实例中进行分析和执行。只要这个恶意代码符合SQL语句的规则,则在代码编译与执行的时候,就不会被系统所发现。由此可见SQL注入式攻击的危害是很大的,那么作为数据库管理员该如何来防治呢?下面这些建议或许对数据库管理员防治SQL注入式攻击有一定的帮助。
  1.普通用户与系统管理员用户的权限要有严格的区分
  如果一个普通用户在使用查询语句中嵌入另一个Drop Table语句,那么是否允许执行呢?由于Drop语句关系到数据库的基本对象,故要操作这个语句用户必须有相关的权限。在权限设计中,对于终端用户,即应用软件的使用者,没有必要给他们数据库对象的建立、删除等权限。那么即使在他们使用SQL语句中带有嵌入式的恶意代码,由于其用户权限的限制,这些代码也将无法被执行。故应用程序在设计的时候,最好把系统管理员的用户与普通用户区分开来。如此可以最大限度的减少注入式攻击对数据库带来的危害。
  2.强迫使用参数化语句
  如果在编写SQL语句的时候,用户输入的变量不是直接嵌入到SQL语句。而是通过参数来传递这个变量的话,那么就可以有效的防治SQL注入式攻击。也就是说,用户的输入绝对不能够直接被嵌入到SQL语句中。与此相反,用户的输入的内容必须进行过滤,或者使用参数化的语句来传递用户输入的变量。参数化的语句使用参数而不是将用户输入变量嵌入到SQL语句中。采用这种措施,可以杜绝大部分的SQL注入式攻击。不过可惜的是,现在支持参数化语句的数据库引擎并不多。不过数据库工程师在开发产品的时候要尽量采用参数化语句。
  3.加强对用户输入的验证
  总体来说,防治SQL注入式攻击可以采用两种方法,一是加强对用户输入内容的检查与验证;二是强迫使用参数化语句来传递用户输入的内容。在SQLServer数据库中,有比较多的用户输入内容验证工具,可以帮助管理员来对付SQL注入式攻击。测试字符串变量的内容,只接受所需的值。拒绝包含二进制数据、转义序列和注释字符的输入内容。这有助于防止脚本注入,防止某些缓冲区溢出攻击。测试用户输入内容的大小和数据类型,强制执行适当的限制与转换。这即有助于防止有意造成的缓冲区溢出,对于防治注入式攻击有比较明显的效果。
  如可以使用存储过程来验证用户的输入。利用存储过程可以实现对用户输入变量的过滤,如拒绝一些特殊的符号。如以上那个恶意代码中,只要存储过程把那个分号过滤掉,那么这个恶意代码也就没有用武之地了。在执行SQL语句之前,可以通过数据库的存储过程,来拒绝接纳一些特殊的符号。在不影响数据库应用的前提下,应该让数据库拒绝包含以下字符的输入。如分号分隔符,它是SQL注入式攻击的主要帮凶。如注释分隔符。注释只有在数据设计的时候用的到。一般用户的查询语句中没有必要注释的内容,故可以直接把他拒绝掉,通常情况下这么做不会发生意外损失。把以上这些特殊符号拒绝掉,那么即使在SQL语句中嵌入了恶意代码,他们也将毫无作为。
  故始终通过测试类型、长度、格式和范围来验证用户输入,过滤用户输入的内容。这是防止SQL注入式攻击的常见并且行之有效的措施。
  4.多多使用SQL Server数据库自带的安全参数
  为了减少注入式攻击对于SQL Server数据库的不良影响,在SQLServer数据库专门设计了相对安全的SQL参数。在数据库设计过程中,工程师要尽量采用这些参数来杜绝恶意的SQL注入式攻击。
  如在SQL Server数据库中提供了Parameters集合。这个集合提供了类型检查和长度验证的功能。如果管理员采用了Parameters这个集合的话,则用户输入的内容将被视为字符值而不是可执行代码。即使用户输入的内容中含有可执行代码,则数据库也会过滤掉。因为此时数据库只把它当作普通的字符来处理。使用Parameters集合的另外一个优点是可以强制执行类型和长度检查,范围以外的值将触发异常。如果用户输入的值不符合指定的类型与长度约束,就会发生异常,并报告给管理员。如上面这个案例中,如果员工编号定义的数据类型为字符串型,长度为10个字符。而用户输入的内容虽然也是字符类型的数据,但是其长度达到了20个字符。则此时就会引发异常,因为用户输入的内容长度超过了数据库字段长度的限制。
  5.多层环境如何防治SQL注入式攻击
  在多层应用环境中,用户输入的所有数据都应该在验证之后才能被允许进入到可信区域。未通过验证过程的数据应被数据库拒绝,并向上一层返回一个错误信息。实现多层验证。对无目的的恶意用户采取的预防措施,对坚定的攻击者可能无效。更好的做法是在用户界面和所有跨信任边界的后续点上验证输入。如在客户端应用程序中验证数据可以防止简单的脚本注入。但是,如果下一层认为其输入已通过验证,则任何可以绕过客户端的恶意用户就可以不受限制地访问系统。故对于多层应用环境,在防止注入式攻击的时候,需要各层一起努力,在客户端与数据库端都要采用相应的措施来防治SQL语句的注入式攻击。
  6.必要的情况下使用专业的漏洞扫描工具来寻找可能被攻击的点
  使用专业的漏洞扫描工具,可以帮助管理员来寻找可能被SQL注入式攻击的点。不过漏洞扫描工具只能发现攻击点,而不能够主动起到防御SQL注入攻击的作用。当然这个工具也经常被攻击者拿来使用。如攻击者可以利用这个工具自动搜索攻击目标并实施攻击。为此在必要的情况下,企业应当投资于一些专业的漏洞扫描工具。一个完善的漏洞扫描程序不同于网络扫描程序,它专门查找数据库中的SQL注入式漏洞。最新的漏洞扫描程序可以查找最新发现的漏洞。所以凭借专业的工具,可以帮助管理员发现SQL注入式漏洞,并提醒管理员采取积极的措施来预防SQL注入式攻击。如果攻击者能够发现的SQL注入式漏洞数据库管理员都发现了并采取了积极的措施堵住漏洞,那么攻击者也就无从下手了。
办法是找一个点进行拦截,将非法字符进行替换。代价是效率有可能会变低。
比如你可以做一个HttpServletRequest的子类,修改其读取请求参数的方法,让在输出前进行一次字符串检查和替换。
已解决问题
未解决问题查看: 3659|回复: 9
面试的时候,问了一个问题,什么是 防止SQL注入?
论坛徽章:1
论坛徽章:1
sql注入的根源在于,程序命令和用户数据(即用户输入)之间没有做到泾渭分明。这使得攻击者有机会将程序命令当作用户输入的数据提交给We程序,以发号施令,为所欲为。网上有很多扫描器,专门扫描网站的sql注入点。
论坛徽章:136
绑定变量就可以防止
招聘 : 论坛徽章:33
类似 string.format
认证徽章论坛徽章:5
特殊字符过滤
论坛徽章:57
在oracle中动态sql直接拼接的话可以给黑客造成sql注入的风险,
使用绑定变量可以规避一部分风险
select secret
from table_jm
where password=(your password)
如果直接拼写,可以这样注入
select secret
from table_jm
where password='sorry,i don't know but i can give the secret' or 1=1,
sql注入是做DB的人要防止的,但是要对其他网站注入sql必须很了解网站使用的DB工具。
论坛徽章:19
大家回答的都是如何防止sql注入,这个问题是问开发的,不应该问dba,目前多的方式主要还是特殊字符过滤吧,dba哪管这个啊
但是考官问得是什么是防止sql注入,这是考你的统合能力,如果这个不懂,只能说你人在it,心不在it
求职 : 论坛徽章:10
学习一下,sql注入!
论坛徽章:43
sql注入简单理解就是病毒入侵。
论坛徽章:43
mustapha 发表于
大家回答的都是如何防止sql注入,这个问题是问开发的,不应该问dba,目前多的方式主要还是特殊字符过滤吧, ...
说得非常好!!!!
itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号: 广播电视节目制作经营许可证:编号(京)字第1149号简单的js防止SQL注入的函数-js教程-网页制作-壹聚教程网简单的js防止SQL注入的函数
SQL注入通常来讲前段防止一般没有什么效果了这个问题做程序的都知道真正做事的是服务器端脚本在做事了,所以完全可以跳过js验证了,不过对于新手还是有一些帮助,我们来看看。
SQL注入攻击的总体思路:
发现SQL注入位置;判断服务器类型和后台类型;确定可执行情况
对于有些攻击者而言,一般会采取法。下面我也谈一下自己关于sql注入法的感悟。
从理论上说,认证网页中会有型如:
* from admin where username=&XXX& and password=&YYY& 的语句,若在正式运行此句之前,如果没有进行必要的字符过滤,则很容易实施SQL注入。
如在用户名文本框内输入:abc& or 1=1& 在密码框内输入:123 则SQL语句变成:
select * from admin where username=&abc& or 1=1 and password=&123& 不管用户输入任何用户名与密码,此语句永远都能正确执行,用户轻易骗过系统,获取合法身份。
基本思路是:猜解所有数据库名称,猜出库中的每张表名,分析可能是存放用户名与密码的表名,猜出表中的每个字段名,猜出表中的每条记录内容。
还有一种方式可以获得你的数据库名和每张表的名。
就是通过在形如:http://www. .cn/news?id=10&的方式来通过报错获得你的数据库名和表名!
前端js防止注入解决办法:
1.URL地址防注入:
//过滤URL非法SQL字符
var sUrl=location.search.toLowerCase();
var sQuery=sUrl.ing(sUrl.indexOf(&=&)+1);
re=/select|update|delete|truncate|join|union|exec|insert|drop|count|'|&|;|&|&|%/i;
if(re.test(sQuery))
&&& alert(&请勿输入非法字符&);
&&& location.href=sUrl.replace(sQuery,&&);
2.输入文本框防注入:
//防止SQL注入
function AntiSqlValid(oField )
&&& re= /select|update|delete|exec|count|'|&|=|;|&|&|%/i;
&&& if ( re.test(oField.value) )
&&& //alert(&请您不要在参数中输入特殊字符和SQL关键字!&); //注意中文乱码
&&& oField.value = &;
&&& oField.className=&errInfo&;
&&& oField.focus();
在需要防注入的输入文本框添加如下方法
txtName.Attributes.Add(&onblur&, &AntiSqlValid(this)&);//防止Sql脚本注入
后面服务器防sql注入
1.全站入口处检查get_magic_quotes_gpc()是否开启,如果没开启,则全站对(包括get、post等,特别是get)进来的数据进行检查,出现add、select、update等字符时提示错误。
2.把错误提示给关了,error_reporting(E_ALL & ~E_NOTICE);// 不显示警告
ini_set(&display_errors&,&Off&);
以防出现警告和错误提示时把网站的路径显示出来。
3.因为那网站没有做,出现了/?id=数字的情况,也就是说存在SQL注入漏洞(盲注)的可能性,应对方法先判断get(id)进来的是否是数字,如果不是直接提示错误,如果是,则intval转换,再进行mysql_query(mysql_query好处是只进行一次查询后自动关闭)。
4.页面异常导致本地路径泄漏。设置出现异常错误时的跳转页面,尽量不出现空白页或500之类的错误页。每次查询都要判断假如无结果时的应对办法。
5.总是提示有漏洞:跨站脚本攻击(XSS)。按上面1、2、3步骤后还是提示有此漏洞,马上进行改正,字符串的话用htmlspecialchars更替html代码。
6.后台路径屏蔽,登录时先检查ID是否正确,如果正确,再MD5加密密码进行查询,2次sql查询加强安全。
上一页: &&&&&下一页:相关内容cas本身有做防止SQL注入的机制么_编程_创设数码解答网
cas本身有做防止SQL注入的机制么
编辑: 创设数码解答网 &&&来源:用户发布&&&发布时间:&&&查看次数:24
求解!cas本身有做防止SQL注入的机制么?感激!
【探讨解答】
在asp中加入了防止sql注入代码如何输入符号
为了防止SQL注入,我的程序加入了如下代码 &% Response.Buffer = True ’...这个很简单啊,你提交表单的时候一般都是登陆了系统的,这样的话,一般的系统都是通过session来验证用户登陆信息的,你可以在最前面加上:
更多相关内容
本站内容来自网友发布,本站无法保证其部分内容的正确性,请用户一定仔细辨别。
[] &&[联系QQ:885&971&98] &
沪ICP备号&网页设计教程与开发
提供各种常见网页效果
提供各种各样的设计教程
装扮QQ,让QQ变得更酷
设计参考,提高自升水平
学习服务器和操作系统
提供各种素材和工具
收藏学习资料
您现在的位置:&&>>&&>>&&>>&&>>&&>>&正文
浅析php过滤html字符串,防止SQL注入的方法
批量过滤post,get敏感数据. 代码如下:$_GET = stripslashes_array($_GET);$_POST = stripslashes_array($_POST);数据过滤函数. 代码如下:function stripslashes_array(&$array) {&while(list($key,$var) = each($array)) {&&if ($key != 'argc' && $key != 'argv' && (strtoupper($key) != $key || ''.intval($key) == "$key")) {&&&if (is_string($var)) {&&&&$array[$key] = stripslashes($var);&&&}&&&if (is_array($var))& {&&&&$array[$key] = stripslashes_array($var);&&&}&&}&}&return $&}替换HTML尾标签,为过滤服务. 代码如下:function lib_replace_end_tag($str){&if (empty($str))&$str = htmlspecialchars($str);&$str = str_replace( '/', "", $str);&$str = str_replace("\\", "", $str);&$str = str_replace("&", "", $str);&$str = str_replace("&", "", $str);&$str = str_replace("&SCRIPT&", "", $str);&$str = str_replace("&/SCRIPT&", "", $str);&$str = str_replace("&script&", "", $str);&$str = str_replace("&/script&", "", $str);&$str=str_replace("select","select",$str);&$str=str_replace("join","join",$str);&$str=str_replace("union","union",$str);&$str=str_replace("where","where",$str);&$str=str_replace("insert","insert",$str);&$str=str_replace("delete","delete",$str);&$str=str_replace("update","update",$str);&$str=str_replace("like","like",$str);&$str=str_replace("drop","drop",$str);&$str=str_replace("create","create",$str);&$str=str_replace("modify","modify",$str);&$str=str_replace("rename","rename",$str);&$str=str_replace("alter","alter",$str);&$str=str_replace("cas","cast",$str);&$str=str_replace("&","&",$str);&$str=str_replace("&","&",$str);&$str=str_replace("&","&",$str);&$str=str_replace(" ",chr(32),$str);&$str=str_replace(" ",chr(9),$str);&$str=str_replace("&&& ",chr(9),$str);&$str=str_replace("&",chr(34),$str);&$str=str_replace("'",chr(39),$str);&$str=str_replace("&br /&",chr(13),$str);&$str=str_replace("''","'",$str);&$str=str_replace("css","'",$str);&$str=str_replace("CSS","'",$str); &return $& }
转载请注明:破洛洛(谢谢合作)
上一篇文章: 下一篇文章:
网友评论:
[][][][][][][][][][]}

我要回帖

更多关于 防止sql注入的方法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信