Web应用程序攻击并且必须具有防御方法

时间:2009-02-04 15:45:16

标签: security web-applications defensive-programming

您必须拥有针对常见网络攻击的防御方法,例如 XSS Sql Injection 拒绝服务等?

修改:我根据Wikipedia的说明收集了您的回复。我添加了一些额外的问题以获得完整的参考。

  

Sql Injection

     

SQL注入是代码注入   利用安全性的技术   漏洞发生在   应用程序的数据库层。该   用户存在漏洞   输入被错误地过滤   用于字符串文字转义字符   嵌入在SQL语句或用户中   输入不是强类型的   从而意外地执行。它是   一个更一般的类的实例   可能发生的漏洞   无论何时编程或编写脚本   语言嵌入另一个语言中。

  • 不要相信用户输入并尽早验证。
  • 不要从原始用户输入构建SQL - 而是使用参数。
  

跨站点脚本(XSS)

     

跨站点脚本是一种类型   计算机安全漏洞   通常在Web应用程序中找到   允许代码注入   恶意网络用户进入网页   其他用户查看。示例   这样的代码包括HTML代码和   客户端脚本。被剥削了   跨站点脚本漏洞可以   被攻击者用来绕过访问   控件如同源   政策。

  • 不要逐字输出或执行用户提交的内容。
  • 对所有输出进行HTML编码。
  

拒绝服务攻击

     

拒绝服务攻击(DoS   攻击)或分发   拒绝服务攻击(DDoS攻击)   是试图制作电脑   其预期的资源不可用   用户。虽然是携带的手段   DoS的出局,动机和目标   攻击可能会有所不同,一般包括   一致的,恶意的努力   一个人或多个人阻止   互联网站点或服务   有效运作或根本运作,   暂时或无限期地。

我知道似乎无法以编程方式避免拒绝服务攻击,但您的想法是什么?

  

暴力攻击

     

在密码分析中,蛮力攻击   是一种打败的方法   加密方案系统地   尝试了大量的   可能性;例如,一个大的   密钥中可能的密钥数   空间以解密消息。   在大多数方案中,理论上   蛮力攻击的可能性是   认可,但它是在这样的   它的计算方式   不可行的。

  • 每当登录尝试次数过多时锁定帐户。绝不允许无限次重试。
  • 输入的密码错误时添加延迟。

一些额外的问题:

  • 您如何看待尝试根据您的内容发布输入的网络漫游器?例如,SO正在使用图像验证。

  • 您如何看待javascript eval 功能?

  • 有没有办法访问服务器上没有暴露给外部的内容。例如,我有一个页面,将一些重要的记录插入到我的数据库中,只有我知道它的URL。有没有办法获得这种文件?我知道你可以为它设置一些安全规则。

注意:目录列表已停用,我托管此文件。)

感谢您的回复!

7 个答案:

答案 0 :(得分:7)

您的问题涵盖范围很广。我会试着给你一些指示。如果您更清楚地指出问题,我可以为您提供更具体的信息。

  1. 永远不会信任用户输入。您的应用程序中可以从外部操作的所有内容都必须经过验证。
  2. 从不在数据库中以纯文本格式存储密码。仅存储哈希(使用salt)。计算用户提供的密码的哈希值并比较哈希值。
  3. 只要有太多登录尝试出错,
  4. 锁定帐户。绝不允许无限次重试。
  5. 使用产品或框架时,请留在这些产品的邮件列表顶部并识别安全问题。当您的底层框架存在安全漏洞时,请准备好升级计划。
  6. 使用数据库时,不允许每个人完全访问数据库(即使您使用存储过程限制对数据库的访问)。如果有人只需要读取某些数据,请不要使用也可以修改数据的SQL帐户。
  7. 关于你的问题:“有没有办法访问服务器上没有暴露给外部的内容。例如,我有一个页面将一些重要的记录插入我的数据库,只有我知道它的网址有没有办法获得这种文件?我知道你可以设置一些安全规则。“ 您可能认为有人无法访问您的网页只是因为他们不知道网址。这是通过默默无闻的安全性,并且永远不会长期有效。 Google索引蜘蛛只会尝试遍历整个网站并为其可以访问的每个网页编制索引。如果您有包含敏感信息的页面,请添加身份验证和授权机制。

答案 1 :(得分:3)

对于XSS和SQL注入:永远不要逐字输出或执行用户提交的内容。

答案 2 :(得分:2)

  • 尽早验证所有内容
  • 不要从原始用户输入构建SQL - 而是使用参数。
  • HTML-encode 所有输出。

答案 3 :(得分:1)

验证!

答案 4 :(得分:1)

最重要的是防止暴力破解密码。通过在输入密码时添加延迟,这很简单。

答案 5 :(得分:1)

我们使用名为fortify的工具扫描我们的软件http://www.fortify.com/(对不起商业产品,但可能还有更多)

它捕获未经验证的用户输入,字符串连接而不是参数等等。

只需尝试此产品,您就可以了解如何编程安全。

答案 6 :(得分:0)

  

您如何看待尝试根据您的内容发布输入的网络漫游器?例如,SO正在使用图像验证。

图像验证称为CAPTCHA。它可以防止自动机器人填写表单,并有助于验证人员是否实际提交了表单。这些通常用于您想要控制对表单的访问的任何位置。垃圾邮件机器人会尝试填写联系表单以绕过垃圾邮件过滤器,因此您可能需要为此类事情添加一些保护。在大多数情况下,表单滥用很少,但在某些情况下您会看到它。

  

您如何看待javascript eval功能?

这取决于你如何使用它。像其他任何东西一样,不要相信用户输入。如果您要通过eval()运行他们的输入,请确保它首先通过一个体面的卫生过程。如果您将其输入存储在数据库中并将其显示出来以供其他用户查看,则这非常重要。这适用于SQL,HTML和JavaScript。如果有人可以通过对网站工作方式的充分了解来执行JS代码,他们可以做各种疯狂的事情并模仿登录用户,更改密码等。

  

有没有办法访问服务器上没有暴露给外部的内容?

正如其他人提到的那样,这将是通过默默无闻的安全性,不推荐。任何敏感都需要放在安全登录区域后面。不要单独依赖“隐藏的URL”。如果有人猜到了您的特殊网址,或者它最终存在于Google可以访问的日志文件中,您可能永远不会知道是否有人设法进入。请对此类内容进行一些身份验证。