PHP开发人员需要了解有关https /安全套接字层连接的信息?

时间:2008-09-15 16:51:12

标签: php security ssl https

关于https连接的方式和原因,我几乎一无所知。显然,当我传输密码或信用卡信息等安全数据时,https是一个重要的工具。但是我需要知道什么呢?您看到开发人员在项目中实施错误时最常见的错误是什么?是否有时候https只是一个坏主意?谢谢!

7 个答案:

答案 0 :(得分:24)

答案 1 :(得分:6)

我不打算深入研究SSL,gregmac在这方面做得很好,见下文; - )。

然而,关于使用SSL / TLS的一些最常见(和关键)错误(不是特定的PHP):

  1. 在您应该强制执行HTTPS时允许HTTP
  2. 从HTTPS页面(例如图像,IFRAME等)通过HTTP检索某些资源
  3. 无意中从HTTPS页面指向HTTP页面 - 请注意,这包括“假”页面,例如“about:blank”(我已经看到这用作IFRAME占位符),这将是不必要的,令人不快的弹出窗口警告。

  4. 配置为支持旧的,不安全的SSL版本的Web服务器(例如,SSL v2很常见,但却非常糟糕) (好吧,这不完全是程序员的问题,但有时候没有其他人会处理它......)

  5. 配置为支持不安全密码套件的Web服务器(我看过只使用NULL密码,基本上提供绝对无加密) (同上)

  6. 自签名证书 - 阻止用户验证网站的身份。

  7. 从HTTP页面请求用户的凭据,即使提交到HTTPS页面也是如此。同样,这可以防止用户在提供密码之前验证服务器的身份......即使密码是加密传输的,用户也无法知道他是否在虚假站点上 - 或者即使它是否会被加密。 / p>

  8. 非安全cookie - 与安全相关的cookie(例如sessionId,身份验证令牌,访问令牌等)必须必须使用“secure”属性集进行设置。这个很重要!如果它未设置为安全,则安全cookie,例如SessionId,可以通过HTTP(!)传输 - 攻击者可以确保这种情况发生 - 从而允许会话劫持等。当你在它(这不是直接相关)时,也在你的cookie上设置HttpOnly属性(有助于缓解一些XSS)。

  9. 过度宽松的证书 - 假设您有多个子域,但并非所有子域都处于相同的信任级别。例如,您有www.yourdomain.com,dowload.yourdomain.com和publicaccess.yourdomain.com。因此,您可能会考虑使用通配符证书....但您也有secure.yourdomain.com或finance.yourdomain.com - 即使在不同的服务器上也是如此。然后,publicaccess.yourdomain.com将能够冒充secure.yourdomain.com .... 虽然可能存在这种情况,但通常你会想要一些特权分离......

  10. 这就是我现在所能记住的,可能会在以后重新编辑......

    至于何时使用SSL / TLS是一个不好的想法 - 如果您的公共信息不是针对特定受众(单个用户或注册成员),并且您并不特别关注他们检索它特别来自正确的来源(例如股票代码值必须来自经过验证的来源......) - 然后没有真正的理由产生开销(而不仅仅是性能...... dev / test / cert / etc)。 / p>

    但是,如果您的站点与另一个MORE SENSITIVE站点之间共享资源(例如,同一服务器),那么更敏感的站点应该在此处设置规则。

    此外,密码(和其他凭据),信用卡信息等应始终通过SSL / TLS。

答案 2 :(得分:1)

确保在HTTPS页面上,页面上的所有元素都来自HTTPS地址。这意味着元素应该具有相对路径(例如“/images/banner.jpg”),以便继承协议,或者需要对每个页面进行检查以找到协议,并将其用于所有元素。 / p>

注意:这包括所有外部资源(例如Google Analytics javascript文件)!

我能想到的唯一不足之处在于它为浏览器和服务器增加了(几乎可以忽略不计)处理时间。我建议只加密需要的传输。

答案 3 :(得分:1)

我想说使用启用SSL的网站时最常见的错误是

  1. 该网站错误地将用户重定向到页面中的http为https
  2. 当必要时,网站不会自动切换到https
  3. 正在通过http加载https页面上的图像和其他资源,这将触发浏览器发出的安全警报。确保所有资产都使用指定https的完全限定URI。
  4. 安全证书仅适用于一个子域(例如www),但您的站点实际上使用多个子域。如果您需要,请务必获取通配符证书。

答案 4 :(得分:0)

我建议任何时候任何用户数据存储在数据库中并进行通信,请使用https。即使用户数据是平凡的,也要考虑这个要求,因为该用户甚至使用了许多这些平凡的细节来在其他网站上标识自己。考虑一下银行问你的所有随机安全问题(比如你住在哪条街上?)。这可以很容易地从地址字段中获取。在这种情况下,数据不是您认为的密码,但也可能是。此外,您永远无法预测哪些用户数据将用于其他地方的安全问题。您还可以期望通过普通网络用户(想想您的祖母)的智慧,这些信息可能构成该用户密码的一部分。

如果您使用https

,则为一个指针

使其成为如果用户输入的话 http://www.website-that-needs-https.com/etc/yadda.php 他们会自动被重定向到 https://www.website-that-needs-https.com/etc/yadda.php (个人宠儿)

但是,如果你只是在做一个简单的html网页,那本质上是从服务器到用户的单向信息传输,不用担心。

答案 5 :(得分:0)

这里所有非常好的提示......但我只想添加一些东西..
我看过一些网站给你一个http登录页面,只有在你发布你的用户名/密码后才会将你重定向到https。这意味着在建立https连接之前用户名是以明文形式传输的。

简而言之,请从ssl登录页面,而不是发布到ssl页面。

答案 6 :(得分:0)

我发现尝试<link>到不存在的样式表也会导致安全警告。当我使用正确的路径时,会出现锁定图标。