制作安全网站的checklist(转)

标有 (*) 的检查项目表示该项是针对相关问题的根本解决方法,应当尽最大努力去完成这些内容。未标 (*) 的项目,表示该项并不能完全消除安全隐患,只是说通过这种方法可以避免发生安全问题。

SQL注射

(*) 在组合SQL语句时要使用SQL变量绑定功能

(*) 如果数据库不提供变量绑定,那么需要对构成SQL的所有变量进行转义

不要将错误信息原封不动地显示在浏览器中。

为访问数据库的用户设置适当的权限。

 

操作系统命令行注射

(*) 避免使用能启动shell命令的语言

使用的语言如果允许启动shell命令,则需要对该功能的参数种的所有变量进行检查,确保只包含合法的操作

 

不检查路径名参数/目录遍历

(*) 不要将外部传进来的参数直接作为文件名来使用

(*) 将打开文件的操作限制在固定的目录中,并禁止文件名中包含路径

为Web服务器上的文件设置正确的访问权限

检查文件名

 

会话管理的问题

(*) 用难以推测的内容作为会话ID

(*) 不要在URL中保存会话ID

(*) 为https协议中使用的cookie设置secure属性

(*) 登录成功后生成新的会话

(*) 登录成功后,在会话ID之外再生成一个秘密信息,每次访问页面时都检查之

不使用固定值作为会话ID

将会话ID保存到Cookie中时,要设置有效期限

 

跨站脚本攻击(XSS)

  不允许输入HTML内容时的解决方法

  1. (*) 输出到页面上的所有内容都要转义
    (*) 输出URL时仅允许以“http://”或“https://”开头的URL
    (*) 不要动态生成<script>…</script>的内容
    (*) 不要从外部网站读入样式表
    检查输入内容

  允许输入HTML内容时的解决方法

          (*) 解析输入的HTML内容,生成解析树,然后提取其中的非脚本部分

          使用脚本删除输入的HTML内容中的相关字符串

  通用解决方法

  1. (*) 应答的HTTP头重指定Content-Type的charset属性
    为避免Cookie情报泄漏,应禁止Trace方法,并对所有Cookie设置HttpOnly属性

 

跨站请求伪造(CSRF)

(*) 所有页面都通过POST来访问,在前一页面的hidden中随机生成一个信息,提交后的页面检查该信息,正确时才予以执行

(*) 执行业务之前再次要求输入密码

(*) 确认Referer是否正确,只有正确时才执行

执行重要操作时,向预先设置的邮件地址中发送邮件

 

HTTP头注射

(*) 不直接输出HTTP头,而使用运行环境提供的头信息输出API

(*) 无法使用API时,要禁止输入的头信息中的换行

删除所有外部输入中的换行

 

邮件盗用(通过某种手段使邮件发送到攻击者指定的地址)

(*) 不使用外部参数作为邮件头信息

必须用外部参数设置头信息时,要删除其中的危险字符。

 

COPY From:http://monyer.com/blog/2008/10/16/zhi-zuo-an-quan-wang-zhan-de-checklist-zhuan.html

转自:http://www.bzcyer.com/post/82.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值