6

对于XSSSql InjectionDenial of Service等常见的Web 攻击,您必须具备哪些防御方法?

编辑:我根据维基百科的描述收集了您的回复。我添加了一些额外的问题以获得完整的参考。

Sql 注入

SQL 注入是一种代码注入技术,它利用应用程序数据库层中出现的安全漏洞。当用户输入被错误地过滤为嵌入在 SQL 语句中的字符串文字转义字符或用户输入不是强类型并因此意外执行时,就会出现此漏洞。它是一类更普遍的漏洞的一个实例,只要将一种编程或脚本语言嵌入到另一种中,就会发生这种漏洞。

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

跨站脚本 (XSS)

跨站脚本是一种通常在 Web 应用程序中发现的计算机安全漏洞,它允许恶意 Web 用户将代码注入到其他用户查看的网页中。此类代码的示例包括 HTML 代码和客户端脚本。攻击者可以利用被利用的跨站脚本漏洞绕过同源策略等访问控制。

  • 切勿逐字输出或执行用户提交的内容。
  • HTML 编码所有输出。

拒绝服务攻击

拒绝服务攻击(DoS 攻击)或分布式拒绝服务攻击(DDoS 攻击)是试图使其目标用户无法使用计算机资源。尽管 DoS 攻击的实施方式、动机和目标可能会有所不同,但它通常包括一个或多个人为阻止 Internet 站点或服务有效运行或完全暂时或无限期地运行而做出的恶意努力.

我知道以编程方式避免拒绝服务攻击似乎是不可能的,但你怎么看?

蛮力攻击

在密码分析中,蛮力攻击是一种通过系统地尝试大量可能性来击败密码方案的方法。例如,密钥空间中的大量可能密钥用于解密消息。在大多数方案中,暴力攻击的理论可能性是公认的,但它的设置方式使得它在计算上不可行。

  • 每当登录尝试出错时锁定帐户。永远不允许无限制的重试。
  • 当输入的密码错误时添加延迟。

一些额外的问题:

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

  • 您如何看待 javascript eval函数?

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

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

感谢您的回复!

4

7 回答 7

7

你的问题涉及的范围很广。我会尽力给你一些指示。如果您更清楚地说明您的问题,我可以给您一些更具体的信息。

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

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

于 2009-02-04T15:49:23.610 回答
2
  • 尽早验证一切。
  • 不要从原始用户输入构建 SQL,而是使用参数。
  • HTML 编码所有输出。
于 2009-02-04T17:10:51.903 回答
1

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

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

只需尝试此产品,您就可以学习如何安全地编程。

于 2009-02-04T16:01:03.900 回答
1

验证!

于 2009-02-04T15:46:57.547 回答
1

最重要的是防止密码的暴力破解。这很简单,只需在输入的密码错误时添加延迟即可。

于 2009-02-04T15:47:40.773 回答
0

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

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

您如何看待 javascript eval 函数?

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

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

正如其他人提到的,这将是通过默默无闻的安全性,不推荐。任何敏感的东西都需要放在安全的登录区域后面。不要只依赖“隐藏的 URL”。如果有人猜到了您的特殊 URL,或者它最终出现在 Google 可以访问的日志文件中,您可能永远不知道是否有人设法进入。围绕类似的东西进行一些身份验证。

于 2009-02-06T16:14:58.253 回答