配色: 字号:
web开发与运维安全浅见
2015-09-22 | 阅:  转:  |  分享 
  
web开发与运维安全浅见CFC4N http://www.cnxct.com目录前置知识SQL注入文件上传XSS与SCRF远程文件包含URL
跳转权限认证数据存储与暴力破解文件解析其他前置知识Web的发展历程http://www.test.com/eg.htmlhttp
://www.test.com/eg.html浏览器如何与服务端通信浏览器、传输协议、服务端浏览器(Netscape、IE
、Firefox、….)传输协议(http1.0)服务端(iis、apache)与用户交互,新事物出现http:/
/test.com/cgi-bin/aa.pl/bb/cchttp://test.com/cgi-bin/aa.pl/bb/cc
http://test.com/cgi-bin/dd.py/ee/ff?a=1http://test.com/cgi-bin/d
d.py/ee/ff?a=1服务端如何与脚本语言通信CGI、STDIN\STDOUT、环境变量保存用户提交的信息,新事物出现脚
本语言如何与数据库通信更……多的需求更多的用户访问,更多的应用,更多的数据----越来越复杂,功能越来越多squid、ngin
x、php、redis、mysql、memcache、lucene、lvs、keepalivedSQL注入当web还是静态的时候
用户无法与服务器交互,也没有DB,就不谈SQL注入了。那时我还年轻,会发生什么安全问题我不知道。当web是动态,后面有DB
浏览器与服务器通过提交查询交互,最直观的以GET方式出现在URL的?后面的中的字符串参数,这些字符为DB语句的特殊字符,比如引号
为SQL语句的闭合符号等。什么是SQL注入,如何注入例子:http://test.com/info.php?id=1http://
test.com/info.php?id=1此URL返回数据库中,某表的第1条信息中的数据。程序中可能这么写的。$arrResu
lt=mysql_query(''SELECTFROMtableWHEREid=''.$_GET[''id'']);
如上的URL,那么查询语句将是SELECTFROMtableWHEREid=1如果URL是这样id=1AND
1,那么查询语句将是SELECTFROMtableWHEREid=1AND1SQL注入URL变成如下这个Info
.php?id=1ANDSELECTLEFT(VERSION(),1)=‘5’SQL语句将是SELECTFROM
tableWHEREid=1ANDSELECTLEFT(VERSION(),1)=‘5’可查询MYSQL版本的第一
个字符是否是5原因是什么对提交的数据未过滤,产生SQL语句的拼接有哪些提交方式GET、POST、COOKIE、其他如何防范不让
其产生SQL语句拼接:SQL参数化查询(PDO)整型参数:强制转化为整型(phpintval、(int))字符串型参数:m
ysql_real_escape_stringSQL注入可能已有的防护依赖php.ini的magic_quotes_gpc,对
提交的参数进行过滤,php会对单双引号、反斜杠、null等字符进行转移,我们不能依赖它,SQL注入的产生是SQL语句的拼接,安全问
题是在SQL语句的执行,应该对进入SQL语句部分的参数进行SQL语句的转义,而不是PHP对字符串的转义,虽然转义字符看起来长得一样
。同时,此参数的开启,对于需要用户原始输入的信息还需要做下反转义,比如用户密码(虽然不要保存原始的)其他间接的SQL注入ECSH
OP的URL参数部分是经过BASE64加密的,之后程序在base64解密完之后,直接使用解密的结果,不做过滤了。过分相信这些提交的
参数,大部分情况,这些URL都是程序生成的。http://test.com/info.php?id=1http://www.ecs
hop.cn/search.php?encode=YTo5OntzOjg6ImtleXdvcmRzIjtzOjE6IjEiO3M6
ODoiY2F0ZWdvcnkiO3M6MToiMCI7czo1OiJicmFuZCI7czoxOiIwIjtzOjk6Im1pb
l9wcmljZSI7czowOiIiO3M6OToibWF4X3ByaWNlIjtzOjA6IiI7czoxMDoiZ29vZH
NfdHlwZSI7czoxOiIwIjtzOjY6ImFjdGlvbiI7czo0OiJmb3JtIjtzOjY6IlN1Ym1
pdCI7czoxMjoi56uL5Y2z5pCc57SiIjtzOjE4OiJzZWFyY2hfZW5jb2RlX3RpbWUi
O2k6MTMxNjIyODE3MDt9SQL注入其他间接注入一些网页游戏,前端FLASH与后端脚本通讯时,选择使用AMF之类协
议,也是有前端(flash)将提交查询的SQL语句加密之后,发送给后端程序,后端程序解密,再做相关查询。这个流程中,也是漏掉对解密
的参数继续做过滤判断。SQL注入SQL注入文件上传网站为了提供更多的功能,吸引用户,推出上传文件功能已经是必备的手段了。尤其是上传
头像。为了确保用户上传的文件合法,一般会使用JS去判断文件的拓展名是否合法,确认合法之后,再通过,允许提交到服务端。当表单提交时,
浏览器会向服务端发出这么一个HTTP数据包文件上传浏览器会读取这个文件的文件名、文件类型(content-type)、文件的二进
制内容,一并发送到服务端。后端程序一般会用POST过来的content-type来验证是否是合法的图片资源等。保存的时候,一般会使
用POST过来的文件名的拓展名,或者整个文件名。这些信息都来自浏览器,严格点说,来自客户端,但不能确定构造这个HTTP包的是浏览器
,或许是坏人修改了这个包。程序使用客户端提交的信息作为判断依据content-type:text/plain也改成了image/
pjpeg,filename:1234.php[\0].jpg,其中\0为十六进制的00当保存的时候,文件名的null字符之后的
字符串将被舍弃,只保留前面的字符。那么,这个文件会被保存成一个php的文件。文件上传重新读取件信息判断(文件头标识)PNG(8b
ytes):89504E470D0A1A0AGIF(6bytes):474946383961(GIF8
9a)Getimagesize函数的问题:文件上传非法文件上传之后,有何危害具体危害,稍后在文件解析章节详聊如何避免PHPGD
库重绘图片Getimagesize获取的mime来给予文件拓展名文件名不使用原文件名,随机生成保存目录不允许脚本解析执行几种
策略联合使用,避免安全问题发生。XSS与CSRF什么是XSSCrossSiteScrip跨站脚本攻击主要分两类来自“站内”来
自外部提交比如URL是这个1.php?keyword=