网站黑客 - 为什么总是可以做到?

时间:2009-11-23 05:47:44

标签: security webserver

我们知道每个可执行文件都可以进行逆向工程(反汇编,反编译)。无论如何强大的安全性,无论如何,如果破解者想要,他们确实破解!这只是一个时间问题。

网站怎么样?我们可以说网站可以完全免受黑客的攻击(我们假设主机不容易受到攻击)吗?如果不是,那是什么原因?

17 个答案:

答案 0 :(得分:31)

是的,总是可以这样做。总有办法。

就像我的祖父总是说:

  

锁是为了保持诚实   人们出去了

答案 1 :(得分:26)

我们可以说网站可以完全免受黑客攻击吗?

没有。一方面,即使是世界上最安全的技术也容易受到social engineering攻击。

答案 2 :(得分:9)

您可以轻松编写一个在数学上被证明是安全的Web应用程序......但只要底层操作系统,解释器|编译器和硬件是安全的,永远不会案件。

答案 3 :(得分:5)

要记住的关键是网站通常是庞大而复杂的系统的一部分,如果黑客通过Web应用程序本身或整个基础架构的其他部分进入系统并不重要。如果有人可以访问您的服务器,路由器,DNS或其他任何东西,他们甚至可以降低最好的Web应用程序。根据我的经验,很多系统都以某种方式易受攻击。因此,“完全安全”意味着“我们正在努力确保平台的安全”或“我们毫无线索,但我们希望一切都好”。我见过两者。

答案 4 :(得分:5)

总结并添加到之前的帖子:

  1. 网络作为共享资源 - 只要网站可以访问,网站就很有用。渲染网站无法访问,你已经打破了它。拒绝服务攻击加剧了服务器的泛滥,因此它无法再响应合法请求将始终是一个因素。这是一场彻头彻尾的游戏 - 大型服务器网站找到了分发方式,黑客找到了泛滥的方法。
  2. 动态数据=动态风险 - 如果用户可以输入数据,则黑客有可能成为一个补缺。今天,最重要的概念是跨站点脚本和SQL注入,但是一旦解决了一条破解途径,另一种机制将会上升的可能性很高。可以想象,你可以认为一个完全静态的网站可以保证这个安全,但是有多少有用的网站适合这个账单呢?
  3. 复杂性 =更复杂,更难保护 - 鉴于技术的快速变化,我怀疑任何网络开发者都可以100%放心地说现代网站是安全的 - 这太过分了未知代码。将主机放在一边(服务器,网络协议,操作系统,可能还有数据库),Java EE和.Net中仍然存在所有优秀的新库。即使是较少的企业架构也会有一些严重的复杂性,这使得了解代码的所有潜在输入和输出都非常困难。
  4. 身份验证问题 =根据定义,该网站允许远程用户在远离的服务器上执行有用的操作。了解和信任通信的另一端是一个古老的挑战。这些天服务器端验证相对较好实现了解和(据我所知!)没有人设法破解PKI。但是,解决用户身份验证仍然非常棘手。这是可行的,但它是用户和配置难度与漏洞风险较高的系统之间的权衡。当用户不遵守规则或发生事故时,即使是强大的系统也可能被打破。如果您想为所有用户创建一个公共站点,这一切都不适用,但这严重限制了您将能够实现的功能。
  5. 我认为网站只是改变了客户端代码挑战的安全挑战性质。开发人员不需要担心代码复制,但开发人员确实需要了解集中数据和访问服务器(或服务器集合)所带来的风险。这只是一个不同的问题。

答案 5 :(得分:3)

网站受到injectioncross site scripting攻击的影响很大

  

进行跨站点脚本编写   网站大约占80%   记录在案的安全漏洞   2007年

网站的一部分(在一些网站上很多)以CSS,HTML和javascript的形式发送给客户端,任何人都可以查看。

答案 6 :(得分:2)

不要挑剔,但是你对“好主机”的定义并不认为在主机上运行的HTTP服务完全没有漏洞。

流行的Web服务器(如IIS和Apache)经常进行修补,以防止此类攻击,这些攻击通常与发现本地可执行文件中的漏洞相同。

例如,格式错误的HTTP请求可能导致服务器上的缓冲区溢出,从而导致部分数据被执行。

答案 7 :(得分:2)

不可能100%安全。

所有可以做的就是做一些足够难以闯入的事情,这样做所花费的时间和精力使它不值得做。

答案 8 :(得分:1)

这可能是一个讨论错误的网站。然而,众所周知,安全性和可用性是反向相关的。例如,Bruce Schneier的这个post(指的是另一个网站,但在Schneier的博客上有很多关于这个问题的有趣读物)。

答案 9 :(得分:1)

说'完全安全'是一件坏事,因为它会陈述两件事:

  1. 没有进行适当的威胁分析,因为足够安全将是“正确”的术语
  2. 因为安全始终是一种权衡,这意味着一个完全安全的系统将具有糟糕的可用性,并且该网站将是一个巨大的资源猪< / strong>因为安全已被带到疯狂的水平。
  3. 所以,不应试图实现“完全安全”;

    1. 做一个合适的threat analysis
    2. 测试您的应用程序(或让某人专业测试)以防止常见攻击
    3. 应用最佳做法,而非极端措施

答案 10 :(得分:1)

假设服务器本身没有被编译,并且没有其他客户端共享它,静态代码应该没问题。当涉及到某种脚本语言时,事情通常才开始变得时髦。毕竟,我从来没有见过一个被称为“它的作品!”页

答案 11 :(得分:1)

我可以破解您的网站吗?当然,我只会雇用一些自杀炸弹手来炸毁你的服务器。或者......我会炸毁那些为你的网站供电的电厂,或者我做某种社会工程,DDOS攻击很可能在很大程度上有效,更不用说原子弹......

简答:是的。

答案 12 :(得分:0)

缺点是你必须在易用性和安全性之间取得平衡,并在大多数情况下决定为你的目的提供最佳水平。

一个很好的例子就是密码。简单的方法就是拥有一个,随处使用,并使其易于记忆。安全的方法是在编码范围内随机生成可变长度的字符序列,只有用户自己知道。

当然,如果你走得太远,用户的数据很容易被发现。但是,如果你在安全方面走得太远,实际应用可能最终导致危及安全措施附加价值的情况(例如,人们无法记住他们的密码和相应用户名的整个钥匙串,因此写它们都在某个地方。如果列表被泄露,那么已经实施的安全措施是徒劳的。因此,大部分时间都会发生平衡并且地方要求你在密码中输入一个数字并告诉你不要做任何愚蠢的事情,比如告诉其他人。

即使你删除了恶意人的可能性,也没有从等式中泄漏数据的关键,人类的愚蠢是无限的。没有100%的安全性。

答案 13 :(得分:0)

  

我们可以说网站可以完全免受黑客攻击(我们假设托管不容易受到攻击)?

如果我们要开始对攻击者施加限制,那么当然我们可以设计一个完全安全的系统:我们只需要禁止所有攻击者的攻击。<​​/ p>

如果我们假设攻击者确实想要进入(并且不受您的约定规则约束),那么答案就是否定,您无法完全免受攻击。

答案 14 :(得分:0)

是的,可能让网站完全安全,合理定义“完整”,包括您的托管不易受攻击的原始前提。问题与任何包含缺陷的软件相同;人们创造的复杂软件略微超出了他们的管理能力,因此在为时已晚之前,这些漏洞仍未被发现。

你可以从小一点开始,在你构建它的过程中证明你的所有工作都是正确和安全的,重新制作任何没有设计到那么严格的质量的现成组件,但不幸的是,这让你无法进行大规模的商业活动。与能够在1%的时间内编写99%安全软件的人相比,这是不利的。因此,沿着这条道路走下去很少是一个很好的商业理由。

答案 15 :(得分:0)

这个问题的答案很接近于考虑停止问题而产生的关于计算理论的想法。 http://en.wikipedia.org/wiki/Halting_problem也就是说,如果你可以清楚地说你已经设计了一种方法来以编程方式确定某个特定程序是否安全,那么你可能会接近于反驳你正在工作的机器类别中停顿问题的不可判定性用。由于停止问题的不可判断性已经得到证实,我们可以知道,由于安全问题减少到停止问题,因此在图灵机上你将无法证明其安全性。即使对于有限的机器,您也可以决定程序的所有状态,但明斯克会告诉我们,即使是简单的现代机器和Web服务器,完整状态树所需的时间也是巨大的。您可能对特定代码有很多了解,但只要您更改代码或更新代码,就需要进行完整的重新测试。从根本上说,这很有趣,因为它可以归结为信息和意义的概念。阅读自动化理论证明,以更多地了解计算系统的局限性。 http://en.wikipedia.org/wiki/Automated_theorem_proving

答案 16 :(得分:-1)

事实上,黑客总是比开发人员领先一步,你永远不会认为一个网站是防弹和100%安全的。你尽可能地避免恶意的东西! 实际上,在安全方面,您应该遵循白名单方法而不是黑名单方法。