一个简单的PHP登录系统。它真的需要SSL证书吗?

一个简单的PHP登录系统。它真的需要SSL证书吗?,php,encryption,ssl,login,Php,Encryption,Ssl,Login,我计划提供我的网站设计,如果有人对一个易于管理的博客感兴趣,或者只是不想为他/她自己的新帖子创建新的html文件,我将提供这个简单的登录/博客系统作为补充 它的主要目的是通过提供密码(用户名不能更改)只允许一个用户登录,并允许他/她编辑一些帐户设置(显示名称、头像、个人信息),或通过在窗口中写入新内容来创建新页面/帖子。这应该是一个非常简单的系统,没有注册表格——我想为所有选择购买我的设计的客户提供一个框架 由于登录系统非常简单,我敢说不需要什么身份验证——只需要输入密码+用户输入的任何其他形式

我计划提供我的网站设计,如果有人对一个易于管理的博客感兴趣,或者只是不想为他/她自己的新帖子创建新的html文件,我将提供这个简单的登录/博客系统作为补充

它的主要目的是通过提供密码(用户名不能更改)只允许一个用户登录,并允许他/她编辑一些帐户设置(显示名称、头像、个人信息),或通过在窗口中写入新内容来创建新页面/帖子。这应该是一个非常简单的系统,没有注册表格——我想为所有选择购买我的设计的客户提供一个框架

由于登录系统非常简单,我敢说不需要什么身份验证——只需要输入密码+用户输入的任何其他形式,例如,新帖子的内容。所以基本上,它应该有以下功能:trim、htmlspecialchars、mysql\u string\u escape、使用正则表达式检查有效字符和用户会话顺便问一下,在只有一个用户的站点上是否需要用户会话?。在这样一个简单的网站上还需要什么?我考虑的是自签名SSL证书,但是,它会导致安全警告。在这种情况下还需要它吗

这个系统将在我所从事的每个HTML/CSS设计项目中重复使用,所以现在需要决定,因为我将为那些只想运行个人网站/博客而不想学习wordpress的人提供这个框架和网站


我知道网站应该加密,但因为这里唯一需要的加密是密码,我应该使用什么?

如果它应该只有一个用户可以登录,那么您可以将所有管理内容放在一个单独的文件夹中,并使用.htaccess对该文件夹进行密码保护

在.htaccess文件中,使用以下命令

AuthUserFile /full/path/to/.htpasswd
AuthName "Please Log In"
AuthType Basic
.htpasswd是存储用户密码的文件

有关更多信息,请参见:

除非您希望客户的登录密码以明文形式通过网络传输,否则您需要SSL证书。您可以使用您提到的自签名证书,如果您不想购买合适的证书,可以指示客户在实际登录之前验证证书中的信息。一旦您打开了https会话,为什么不让它保持打开状态,让用户在相对安全的环境下工作呢?

您需要的安全级别与其说与机制的复杂性有关,不如说与您所保护的东西的价值有关

如果你把它作为一项服务来提供,你可能不会想要一个脆弱的认证系统,让你的客户创建的网站被黑客接管。如果你在传输过程中不加密用户密码,你就让黑客的生活变得非常、非常简单——他们所要做的就是在星巴克设置,破解WIFI,观看你的客户登录,并接管他们的网站。所以,请使用SSL证书;自签名保护您的数据,但确实会导致安全警告-在适当的证书上飞溅

一般来说,用户不信任自签名证书是正确的,因为这是一种相当简单的黑客可能攻击您的方式。例如,如果您想窃取StackOverflow.com用户的凭据,可以注册域stack0verfl0w.com,并为登录页颁发自签名证书。用户将看到该证书,它将匹配伪造的域,如果他们习惯于接受自签名证书,他们将继续在黑客的网站上输入他们的详细信息

因此,是的,您可以使用自签名证书,它将加密web流量,但培训用户忽略浏览器的安全警告不是一个好主意。自签名的定义是它们不在任何地方注册

其次,请不要以纯文本形式存储密码。通常的做法是使用PHP内置的单向散列来存储密码;即使黑客可以窃取您的数据库,哈希函数也是单向的;没有简单的方法检索明文密码。当用户登录时,使用相同的算法对其密码进行散列,如果数据库中的散列匹配,则允许他们进入

第三,考虑使用现成的框架进行身份验证。似乎符合你的要求。一般来说,最好使用现成的解决方案来解决这类问题,因为您的用户有期望,通过自定义代码来满足这些期望是昂贵的,而且容易出错

授权是一门黑暗的艺术,但一般来说,开放源码框架可以根据非常宽松的要求重新分发。通常,您只需要告诉人们您包含了一个开放源码组件

请不要自己滚 登录系统:

您还可以获得由浏览器根证书颁发机构签名的免费SSL证书:


谢谢那么,如果所有这些东西都可以通过.htaccess进行保护,为什么还要使用SSL加密呢?我认为简单登录系统上的安全威胁要小得多,不是吗?SSL主要不是用于保护内容的。它用于加密在客户端和服务器之间传输的数据,以避免中间人攻击。他们确保数据传输的安全。由于他们使用私钥机制,他们也可以用于身份验证。我想我理解这一点,但是我正在开发的登录系统是否太简单,不需要SSL?我真的应该害怕不使用它吗?这是完全可选的,因为SSL身份验证不会影响应用程序或其结构。考虑到你的项目的复杂性,你不必为此担心。但是,只要客户需要或要求,您就可以安装自签名证书,并相应地告诉客户他们需要信任证书颁发者。这不应以任何方式影响应用程序的开发。@user1020567使用此答案中建议的HTTP基本身份验证是可以接受的,但它不会在传输过程中保护密码。任何能够窃听流量的人都可以看到用户的密码。我见过许多网站不使用https://并且我几乎可以肯定他们没有SSL证书,但他们仍然提供登录表单。例如,stackoverflow-没有https://。没有警告!我在这个地区几乎迷路了。有很多人呼吁加强安全,这样会更好一些。此外,登录本身可以通过SSL,具体取决于OpenID提供程序。关于这一点,有一个悬而未决的问题:段落!!是鼓励人们阅读你的问题的好方法。谢谢。我已经知道md5和sha算法,只是忘了提到它们。我计划提供的网站是为那些只想拥有自己的个人博客的普通人提供的,仅此而已。我不认为这样的网站会获得成千上万的用户,然而,SSL似乎仍然是必要的。我可以在每个项目中提供自签名SSL证书吗?我问这个问题是因为我不知道这些免费证书是否应该在某个地方注册。起初,我想使用你提到的登录系统,因为我担心我编写的框架会包含太多错误,并且不安全。然而,由于我将接受客户的请求,为他们设计网站,然后将设计与登录系统一起出售,这不是违反登录系统的许可证吗?我需要在即将出售的项目中加入一个免费框架。我只是不确定授权的内容。避免使用MD5和SHA-1进行散列,请参阅。为SSL设置证书由域所有者决定。