Web系统常见编码漏洞(开发工程师知晓)
1.头号大敌:SQL Injection
原因:程序中对用户输入检查不严格,用户可以提交一段数据库查询代码,根据程序返回的结果,
获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
本质:
对于输入检查不充分,导致SQL语句将用户提交的非法数据当作语句的一部分来执行。
示例:
String query = "SELECT id FROM users WHERE username="+user+" AND password="+pass;
尽量写成
String query = "SELECT id FROM users WHERE username=? AND password=?";
PreparedStatement stmt = con.prepareStatement(query);
stmt.setString(1, user);
stmt.setString(2, pass);
2.潜在威胁:XSS(Cross Site Script)跨站脚本漏洞
现象:
上传js脚本,html文本,uplaode image与iframe结合,窃取用户名、密码
解决:
输出时使用html encode 转义字符,使得成为纯文本输出
输入处做filter,过滤可执行的html代码
3.FCKEditor等文件上传漏洞:
原因:
对可上传的文件类型控制不严格,导致可以上传可执行的脚本,从而导致服务器被控制
解决方法:
使用正确的函数
白名单与黑名单
禁止上传目录有执行脚本的权限
不要在url中显示上传文件的相对路径
4.越权问题:auth-bypass
解决:
检查每个操作是否进行授权,授权给谁
5.HTTP头的安全隐患:这是一块盲区,http头中的字段很容易被修改
解决:
不要信任来自http头中的取的字段
6.Web 容器自身规则漏洞
现象:Phpshell.php.rar.rar.rar
Apache只会解析第一个 “ . ”
解决:
编码注意
7.暴力破解:验证码可以被暴力破解
解决:
对暴力破解尝试进行帐户锁定,可能会造成恶意尝试锁定帐户