安全性检查工具
1 CAT.NET
2 AppScan
一 SQL注入攻击(SQL Injection)
问题1:用字符串连接组合SQL命令的方式;
修复方法:
使用参数化查询或者使用存储过程;但是如果使用了存储过程,也要避免在存储过程中使用字符串连接组合SQL命令的方式,l动态拼接sql语句,使用exce方式执行;修改通用分页存储过程;
问题2:数据库访问权限过大;
修复方法:
去除sa权限,每一个数据库设置一个数据库专用用户;
不开发权力过大的功能,如xp_cmdshell;
不要使用集成登录方式;
Web.config数据库连接字符串,使用加密方式存储;
问题3:未限制输入的字符数
解决办法:除了在客户端限制输入字符数,重要的地方还要在服务器端限制字符数;
问题4:未对用户输入的数据做潜在的指令检测
解决办法:
提供统一的帮助类库,在获取输入数据时,过滤危险字符串;
能使用值类型的不要使用String类型;
问题5:如果系统已经运行,修复工作量很大,如果防止sql注入;
解决办法:
使用微软免费提供的IIS组件UrlScan 3.1防止sql注入
二 跨站脚本(XSS)攻击
问题1:过度信任客户端数据
解决办法:
提供统一的帮助类库,在获取输入数据时,过滤危险字符串;
能使用值类型的不要使用String类型;
如果没有特殊要求,请不要禁止 Validaterequest
问题2:服务器端安全设置不足;
解决办法:
每个站点,应用程序池,设置单独用户,不是使用默认的IIS用户;
如果仅仅是静态页面,设置为只读属性;文件夹
问题3:Cookies未做足够的安全处理;
解决办法:
加密;绑定MAC地址,IP地址;
问题4:ViewState没有加密;
解决办法:
在web.config设置所有网站为ViewState加密即可;
问题5:对输出进行编码以过滤特殊字符;
解决办法:
HttpUtility.HtmlEncode(使用黑名单方式)
AntiXss.HtmlEncode(使用白名单方式,更安全推荐使用)
问题6:解密登录的请求,诸如用户名、密码和信用卡号之类的敏感输入字段未经加密即进行了传递
解决办法:
通过加密连接(如 SSL)将其发送到服务器
RSA客户端js加密服务器,思路:1.服务器每次随机生成公私钥2.只把公钥发给客户端3.客户端用js和公钥加密4.密文到服务器用私钥解密
三 垃圾信息群发(SPAM)
问题1:垃圾邮件
解决办法:
使用垃圾邮件过滤功能的邮件服务器和客户端
问题2:发布包含有隐藏文本,重复关键字,恶意链接;发布不合法的内容;
解决办法:
使用不易被OCR系统识别的验证码功能;
通过HttpModule等手段,网站全局禁止提交不合法内容;
通过技术实现禁止用户短时间内重复提交数据的功能;
适当的人工审核机制;
问题3:OCR程序自动识别验证码图片,自动提交垃圾数据信息;
四 网页木马(SPY)
问题1:上次安全漏洞的非法*.asp.*.php.*aspx等文件;
这些非法网页程序所在的文件目录,有执行权限;这些文件有读取,修改,删除等权限;可以执行特殊的系统命令;
解决办法:
设置可上传的文件类型,并且正确获取文件扩展名(FileSystemInfo.Extension);
有安全风险的网站将其设置在独立的应用程序池中;
应用程序池不要使用默认的NETWORK SERVICE用户;
新建用户portal,隶属于IIS_WPG,设置应用程序池中的“标识”,在配置寻找新创建的portal;上传的文件夹类型,选择用户portal,不能设置为完全控制;
站点的执行权限,选择“纯脚本”,不要选择写入;
上传文件的存储目录在IIS中不允许执行脚本;
不需要动态修改的文件或目录,最好设置为只读;
文件系统使用NTFS格式,并设置好足够的最小权限;
IIS7.5,建议将应用程序池设置为ApplicationPoolIdentity
问题2:服务器上安装有漏洞的软件/服务程序;
解决办法:
安装杀毒软件;
卸载有漏洞软件;
操作系统打补丁;