⑴ sql 注入 查询 特殊符号怎么处理
防止sql注入,最简单的办法就是不要拼接sql,而是采用SqlParameter参数化形式,如果条件可能有可能没有,可以采用:
string sql = "select * from xx where 1=1";
if(true){
sql += " and id=@id";
command.Parameters.Add(new SqlParameter
}
如果非要拼接sql,那么对于数值型,拼接前判断下是否数值,
字符串类型拼接前进行str.Replace("'", "''");// 把一个单引号替换为两个单引号
就可以避免sql注入了
⑵ 求大神,sql语句模糊查询怎么实现的,带参数
sql语句模糊查询怎么实现的,带参数
like '%'+@参数+'%',只能这样子写 防注入的话,你也可以在拿到这个值的时候,在后台代码检测一下先
⑶ sql注入,如何查找呢
构造SQL语句,查看结果,其实知道SQL注入本质就知道查找了,SQL就是远程主机能执行你添加的SQL语句,如果远程服务能执行说明该WEB存在可能被注入的威胁
⑷ JAVA方法,SQL语句模糊查询
String sql="select * from ARITCLE where type="+type+" and title like \'\%"+title+"\%\' and writer like \'\%"+writer+"\%\'"
楼上的思路是对的,但是Java中输出符号要用转义符 \ 的,应为在Java中 ' % 用自己的意思,所以要用 \' \% 来表示
⑸ 实现模糊查询并能防止sql注入的方法有哪些,急救...
1. 存储过程
2.视图
3.函数
4.参数化
我就知道这几个了,希望帮到你。
⑹ 扫描发现一个SQL注入,请问如何验证这个注入,请给我详细过程,谢谢,好的话还可以加分
扫描是如何进行的,验证是否存在也是一样的!
扫描是用某一地址后加上了and 1=1取得的结果进行与and 1=2取得的结果进行比较而确认存在的!有时直接可以对and 1=2进行分析.如果内容没有显示完或是显示有部分错误时,一般会报数据库错误!可以知道这存在一个SQL 注入的!
然后就是直接的注入了!以手动为例,第一步猜表名:使用(select count(*) from admin)>0将语句中的1=2代替,查看反回结果,若是与1=2的界面一样出现错误或是显示不完全,则说明不存在admin表,一步一步到试表名,常用的一般是admin,administrator,manager等表名的!
第二步从猜到的表名中猜列名
(select count(*) from admin where len(username)>=1)>0
如果显示完全则表明存在username列名,当然还要猜一个密码的列名,一个是user,username之类,密码是password之类.
第三步,从猜到的表名或列名中猜管理员的名称.
如果是论坛的形式,有些设计上有不好的地方,就是管理员在论坛中发言的那个名称往往就是管理员的名称,因为图省事,发言所用的昵称与登陆所用的用户名是同一个.如果是,则好办,否则也是猜的!
一般我会找一个最长的管理员名称猜或者先猜出长度!如:len(username)>=5时正常,而大于等于6时出错!那么长度一定是5位!
然后用
(select count(*) from admin where len(username)=5 and left(username,1)>='a')>0
出错则第一个字符小于a,根据字符的编码去猜吧,可以找到猜到left(username,1)>="A"时正常,而>="B"时不正常.那么第一个字符就是"A",直到5个都猜完,比如得到"Admin"就知道了其用户名!
第四步猜密码:
(select count(*) from admin where username ='Admin' and left(password,1)>='a')>0
同样的方式可以猜到密码,最好先猜一下密码长度,如果是16位或是32位时往往使用了MD5加密,猜到的是加密过的字符而不是真正的密码!
第五步,其实第五步也是提前确认的,不然我们作的都是无用功!找后台登陆页面.
在后台登陆,当然如果网站为了安全,使用了JS先对密码进行加密的话,可以让JS不运行或是下载页面进行改造,不让其加密你的密码,这时你可以在密码中直接输入第四步的MD5的值.如果密码是明文传播,也就是在服务器端进行校验时,只有将第四步得到的MD5匹配,不叫反解MD不能反解,但可以在网站上得到一个匹配,也就是说某一个密码可以生成同样的MD5值,那这个密码就可以用!当然,如果明文存在数据库中就更好玩了!直接输入吧!
第六步,进入后台后,添加管理员帐户!以后想怎么玩就怎么玩,要是一个不细心的网管,再不查一下后台的管理员,你想他的后果是什么?
第七步,可能吗?大部分的管理员不是弱智,所以第六步往往只是一个障眼法!因为添加管理员很容易被发现的!添加木马程序!或者写一个页面,这个页面的名字与地址你自己记好,然后隐藏,一般管理员都不会在意的!这个页面是显示其特定数据库的!你也想了显示哪个呢?肯定管理员了!
以后你也登陆,如果添加的帐户登陆不上,就调用那个隐藏的地址,显示出真正管理员的密码或是MD5值,同上边一样登陆进行!再建一个管理员迷惑他!
当然,如果数据库允许插入的话,也好玩!不必狂管理员的帐户与密码,直接使用insert into语句插入一个管理员和密码就可以了!但是由于admin表中除这两项外,还有不允许为空时我们要么再猜其他字段(这个很难),很难插入的!
如果是SQL数据库,而他们开的恰恰又是sa帐户的话,好玩的事更多了!因为sa的权限很大,直接可以从系统表中查询各个表的名称等,
这只是手动的一个例子,做为新手可以实现注入.但记着不要给人家网站添麻烦,都不容易!
⑺ 求助,关于SQL注入如何绕过SELECT语句的过滤
1,:转换个别字母大小写,无效
2:输入SESELECTLECT之类的语句来代替SELECT,无效
3:用转义的URL编码来代替SELECT(不知道这么表述对不对,就是%后面跟上16进制的ascii码……),无效
4:用/**/来隔开SELECT中的各个字母,无效
⑻ sql的模糊查询
1.防止SQL注入 你得把传进来的参数里面的特殊字符都过滤掉 这个比较简单 字符替换就行
2.select * from news where title like '%'+@title+'%'
这样写
⑼ C#写了一条SQL查询语句,带了防注入参数,但是想模糊查询怎么办
like '%'+@参数+'%',只能这样子写
防注入的话,你也可以在拿到这个值的时候,在后台代码检测一下先
⑽ 如何实现SQL的多条件模糊查询
不知道我是否理解了你的意思。
由于不知道页面会传来多少个“问题”,你只能去手动拼接sql语句了。比如页面穿来了n个"问题“。
你只能去遍历,比如”问题"的name值为"answer",在前台你可以处理下,把所有的answer以逗号分割,比如"answer1,answer2..."
String answer[]=request.getParameter("anser").split(",")
String answerVal[]=request.getParameter("answerVal").split(",")
StringBuilder sb=new StringBuilder();
sb.append("select * from table where ")
for(int i=0,l=answer.length;i<l;i++){
sb.append(answer[i]+ " like '%"+answerVal[i]+"' and ");
}
sb.append(" 1=1 ")
String sql=sb.toString()
//execute query
这段代码不完整,会有点问题 但思路是这样的。还有 别直接这么写,建议用prepareStatement,否则会存在SQL注入。懂思想即可。