今天看到说index主页被篡改成了木马网站什么的,所以我就想怎样去预防呢?
我来说说我的想法,不对的请指正,有遗留的请补充,大家学习嘛.
1.$data=input('');$sql=".....$data"; Db::execute($sql);
这是一条我经常写的按照用户数据,自动更新数据库字段的语句,他的好处是简单,代码少.坏处是,对于恶意提交的sql注入式攻击,防不胜防!
解决的方法是:对input回来的数据进行(关键字替换+字符串加密处理).替换指的是,吧$data中关键字如:select join update delete 等等替换成"赛冷特 脚印 阿不得 地里特"等等中文字符,然后再进行数据加密处理,加密算法有很多,比如最简单的循环位移法,把字符串中的每个字符按照用户密码md5后的字符串的某个字符的asc码值先循环左位移码值次数,然后每一个$data中的字符串依次循环左移,直到用户输入的$data中最后一个字符被加密,得到一个密文$codata,保存密文到数据库字段中,这样才安全.取出来就可以按照密码右位移相应次数即可.
2.index.php被攻击篡改,一般有两种方式,一种是post或是get或是ajax提交,三种提交方式本质上是一样的东西,只是手段不同,相同的是都是通过文件头来保存传送数据.post可以用专用软件来生成无数个可能的数据来post到你的提交页面,如果你的代码没有漏洞,对用户输入的数据进行了限长,转码,加密三重操作后,攻击的可能性就很低.
3.upload 文件上传
上传的文件及时你限制了文件扩展名,比如文本/图片等等,但是你不知道里面的文本中是否有可执行的脚本,比如js,比如java等等,当然单单能上传隐藏脚本的文件到你的upload目录也无法执行,还是要配合post传过来的漏洞.
解决的方法是,上传的文件一律都是转码/加密处理然后存放在二进制文件中,当你需要取出来,在做解密处理,然后按照原样字符串输出.
4.数据双锁
数据库数据要做好两种准备,一,全部数据库被盗窃备份,但是小偷无法直接读取数据原文,这样即使被盗也没有价值.二,读取与写入不在一个服务器上,如果是小应用,读写不在一个表上操作,如果再更小的应用,读写不在一个字段上操作.比如说存款余额,a字段是加密过的余额数据(ac669538ttdddll),b字段是a字段加密前的明文的md5值,c字段是明文(2003.45元)
当用户取款,a字段首先用用户密码做a字段的解密(加密算法左循环移位的逆操作右循环移位)然后做md5,看是不是b字段的值,如果不是,更新余额操作不执行,如果正确更新操作.c字段的左右是用来统计,查看余额,等等危险系数较低的操作的,二a,b字段是用来验证写入操作的.这就是数据双锁.
最佳答案
