制作安全网站的checklist
标有 (*) 的检查项目表示该项是针对相关问题的根本解决方法,应当尽最大努力去完成这些内容。未标 (*) 的项目,表示该项并不能完全消除安全隐患,只是说通过这种方法可以避免发生安全问题。最后一条似乎没什么意思,不翻译了。
1. SQL注射
1. (*) 在组合SQL语句时要使用SQL变量绑定功能
2. (*) 如果数据库不提供变量绑定,那么需要对构成SQL的所有变量进行转义
3. 不要将错误信息原封不动地显示在浏览器中。
4. 为访问数据库的用户设置适当的权限。
2. 操作系统命令行注射
1. (*) 避免使用能启动shell命令的语言
2. 使用的语言如果允许启动shell命令,则需要对该功能的参数种的所有变量进行检查,确保只包含合法的操作
3. 不检查路径名参数/目录遍历
1. (*) 不要将外部传进来的参数直接作为文件名来使用
2. (*) 将打开文件的操作限制在固定的目录中,并禁止文件名中包含路径
3. 为Web服务器上的文件设置正确的访问权限
4. 检查文件名
4. 会话管理的问题
1. (*) 用难以推测的内容作为会话ID
2. (*) 不要在URL中保存会话ID
3. (*) 为https协议中使用的cookie设置secure属性
4. (*) 登录成功后生成新的会话
5. (*) 登录成功后,在会话ID之外再生成一个秘密信息,每次访问页面时都检查之
6. 不使用固定值作为会话ID
7. 将会话ID保存到Cookie中时,要设置有效期限
5. 跨站脚本攻击(XSS)
* 不允许输入HTML内容时的解决方法
1. (*) 输出到页面上的所有内容都要转义
2. (*) 输出URL时仅允许以“http://”或“https//”开头的URL
3. (*) 不要动态生成<script>...</script>的内容
4. (*) 不要从外部网站读入样式表
5. 检查输入内容
* 允许输入HTML内容时的解决方法
1. (*) 解析输入的HTML内容,生成解析树,然后提取其中的非脚本部分
2. 使用脚本删除输入的HTML内容中的相关字符串
* 通用解决方法
1. (*) 应答的HTTP头重指定Content-Type的charset属性
2. 为避免Cookie情报泄漏,应禁止Trace方法,并对所有Cookie设置HttpOnly属性
6. 跨站请求伪造(CSRF)
1. (*) 所有页面都通过POST来访问,在前一页面的hidden中随机生成一个信息,提交后的页面检查该信息,正确时才予以执行
2. (*) 执行业务之前再次要求输入密码
3. (*) 确认Referer是否正确,只有正确时才执行
4. 执行重要操作时,向预先设置的邮件地址中发送邮件
7. HTTP头注射
1. (*) 不直接输出HTTP头,而使用运行环境提供的头信息输出API
2. (*) 无法使用API时,要禁止输入的头信息中的换行
3. 删除所有外部输入中的换行
8. 邮件盗用(通过某种手段使邮件发送到攻击者指定的地址)
1. (*) 不使用外部参数作为邮件头信息
2. 必须用外部参数设置头信息时,要删除其中的危险字符。
from:http://tech.idv2.com/2008/04/19/secure-website-checklist/
1. SQL注射
1. (*) 在组合SQL语句时要使用SQL变量绑定功能
2. (*) 如果数据库不提供变量绑定,那么需要对构成SQL的所有变量进行转义
3. 不要将错误信息原封不动地显示在浏览器中。
4. 为访问数据库的用户设置适当的权限。
2. 操作系统命令行注射
1. (*) 避免使用能启动shell命令的语言
2. 使用的语言如果允许启动shell命令,则需要对该功能的参数种的所有变量进行检查,确保只包含合法的操作
3. 不检查路径名参数/目录遍历
1. (*) 不要将外部传进来的参数直接作为文件名来使用
2. (*) 将打开文件的操作限制在固定的目录中,并禁止文件名中包含路径
3. 为Web服务器上的文件设置正确的访问权限
4. 检查文件名
4. 会话管理的问题
1. (*) 用难以推测的内容作为会话ID
2. (*) 不要在URL中保存会话ID
3. (*) 为https协议中使用的cookie设置secure属性
4. (*) 登录成功后生成新的会话
5. (*) 登录成功后,在会话ID之外再生成一个秘密信息,每次访问页面时都检查之
6. 不使用固定值作为会话ID
7. 将会话ID保存到Cookie中时,要设置有效期限
5. 跨站脚本攻击(XSS)
* 不允许输入HTML内容时的解决方法
1. (*) 输出到页面上的所有内容都要转义
2. (*) 输出URL时仅允许以“http://”或“https//”开头的URL
3. (*) 不要动态生成<script>...</script>的内容
4. (*) 不要从外部网站读入样式表
5. 检查输入内容
* 允许输入HTML内容时的解决方法
1. (*) 解析输入的HTML内容,生成解析树,然后提取其中的非脚本部分
2. 使用脚本删除输入的HTML内容中的相关字符串
* 通用解决方法
1. (*) 应答的HTTP头重指定Content-Type的charset属性
2. 为避免Cookie情报泄漏,应禁止Trace方法,并对所有Cookie设置HttpOnly属性
6. 跨站请求伪造(CSRF)
1. (*) 所有页面都通过POST来访问,在前一页面的hidden中随机生成一个信息,提交后的页面检查该信息,正确时才予以执行
2. (*) 执行业务之前再次要求输入密码
3. (*) 确认Referer是否正确,只有正确时才执行
4. 执行重要操作时,向预先设置的邮件地址中发送邮件
7. HTTP头注射
1. (*) 不直接输出HTTP头,而使用运行环境提供的头信息输出API
2. (*) 无法使用API时,要禁止输入的头信息中的换行
3. 删除所有外部输入中的换行
8. 邮件盗用(通过某种手段使邮件发送到攻击者指定的地址)
1. (*) 不使用外部参数作为邮件头信息
2. 必须用外部参数设置头信息时,要删除其中的危险字符。
from:http://tech.idv2.com/2008/04/19/secure-website-checklist/
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?