api参数进行强制转换能避免注入吗?

wlm212
  • 54

公司做的一个商城,是我开发的,马上要上线了!
看到同行,昨天又被黑客,篡改了数据库数据,还提交了木马上去,业务几乎崩溃了。看到这里我瑟瑟发抖。

看样子是被黑客找到了注入点!

于是我做的系统,tp框架,我也不确定都是用了,pdo参数化设计,从代码上看,好像没用这些特性。

我寻思着,要不这样。我只接收参数是数字类型的数据。不要搜索功能,服务器对参数进行强制转换成数字int类型!

没有用户留言功能,提交反馈意见啥的。

上传文件接口关闭,例如用户不可以改头像!
后台管理入口,改成复杂的url

不考虑服务器自身安全,假设安全了。

这种方式如何?

回复
阅读 911
2 个回答
志伟
  • 2
新手上路,请多包涵

使用mybatis 或者 hibernate 框架自带就可以防止sql注入,不换框架最快的方法大概就是每一个地方都加字符判断,比如下面的写法,每一个地方都加虽然麻烦,可处理起来最快了

 String injStr = "'|and|exec|create|insert|select|delete|update|count|*|%|chr|mid|master|truncate|drop|char|declare|;|or|-|+|,|while";
        String injStrArr[] = injStr.split("\\|");
        injectStr = injectStr.toLowerCase();
        for (int i = 0; i < injStrArr.length; i++) {
            if (injectStr.indexOf(injStrArr[i]) >= 0) {
                return true;
            }
        }

如果你真能做到所有传入的参数,都是数字,对于注入攻击这一块来说,那倒是真的可以解决。。= =
不过把那是特别不推荐这个做法了,一定会给项目功能扩展和维护方面带来大麻烦
面对SQL注入,我们不要害怕他,弄明白SQL注入的原理和当前自己操作数据库的方式就可以规避了

一条准则,不管你用什么语言都尽量保证使用 预编译语句
不能使用预编译语句的,比如某些关键字,order desc 之类的,才采用转换,比如用户传入0,1来转换。
这种情况下应该说就不用太害怕SQL注入了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏