提问人:Mark Harrison 提问时间:8/27/2008 最后编辑:Yeldar KurmangaliyevMark Harrison 更新时间:7/14/2015 访问量:1954
网站编程漏洞清单
Checklist for Web Site Programming Vulnerabilities
问:
看着 SO 上线对我来说是一种教育。我想列出针对网站的各种漏洞和漏洞,以及可以使用哪些编程技术来防御它们。
答:
SQL注入
XSS(跨站点脚本)攻击
显然,测试每个字段的漏洞:
- SQL - 转义字符串(例如
mysql_real_escape_string
) - XSS的
- 从输入字段打印的 HTML(通常是 XSS 的好兆头)
- 与创建该字段的特定目的无关的任何其他内容
搜索无限循环(唯一间接的事情(如果很多人不小心发现了它)可以真正杀死服务器)。
在 Open Web Application Security 项目中:
- OWASP十大漏洞 (pdf)
- 有关更详尽的列表: Category:Vulnerability
前十名是:
- 跨站点脚本 (XSS)
- 注入缺陷(SQL注入、脚本注入)
- 恶意文件执行
- 不安全的直接对象引用
- 跨站点请求伪造 (XSRF)
- 信息泄露和错误处理不当
- 身份验证和会话管理中断
- 不安全的加密存储
- 不安全的通信
- 无法限制 URL 访问
易于监督和修复:对从客户端接收的数据进行清理。检查诸如“;”之类的内容有助于防止恶意代码注入到应用程序中。
我附议OWASP信息是宝贵的资源。以下几点可能也值得关注,尤其是攻击模式:
G'day,
一个很好的安全静态分析工具是 David Wheeler 编写的 FlawFinder。它在寻找各种安全漏洞方面做得很好,
但是,它并不能取代让知识渊博的人通读您的代码。正如大卫在他的网页上所说,“拥有工具的傻瓜仍然是傻瓜!
HTH。
干杯 抢
一些预防技巧:
XSS的
如果您从用户那里获取任何参数/输入并计划输出它,无论是在日志中还是在网页中,请对其进行清理(去除/转义任何类似于 HTML、引号、javascript 的内容......如果在页面内部打印页面的当前 URI,请进行清理!例如,即使是打印PHP_SELF也是不安全的。消毒!反射型 XSS 主要来自未经审查的页面参数。
如果您从用户那里获取任何输入并保存或打印,请在检测到任何危险/无效时警告他们,并让他们重新输入。IDS 适用于检测(例如 PHPIDS)。然后在存储/打印前进行消毒。然后,当您从存储/数据库打印某些内容时,请再次消毒! 输入 -> IDS/sanitize -> store -> sanitize -> 输出
在开发过程中使用代码扫描程序来帮助发现可能易受攻击的代码。
XSRF的
- 永远不要将 GET 请求用于 破坏性功能,即 删除帖子。相反,只有 接受 POST 请求。GET使黑客更加容易。
- 检查 referrer 确保请求 来自您的网站没有 工作。欺骗 引荐。
- 使用随机哈希作为令牌,该令牌必须在每个请求中存在且有效,并且将在一段时间后过期。在隐藏的表单字段中打印令牌,并在发布表单时在服务器端进行检查。坏人必须提供正确的令牌才能伪造请求,如果他们设法获得真正的令牌,则需要在过期之前。
SQL注入
- 你的 ORM 或 db 抽象类应该有清理方法 - 始终使用它们。如果您没有使用 ORM 或 db 抽象类...你应该是。
您可以从 Security Compass 获得良好的 firefox 插件来测试多个缺陷和漏洞,例如 xss 和 sql 注入。太糟糕了,它们不能在 firefox 3.0 上运行。我希望这些将很快得到更新。
评论