我正在工作的网络应用程序,将使用PHP和MySQL。应用程序将处理机密数据。我需要让它尽可能的安全。
我不希望应用程序用来连接到数据库的MySQL用户的密码是在明文格式(例如根帐户)的PHP文件中编写的。
正因为如此,我用存储过程制作了伪MySQL角色系统。用户将使用其MySQL用户名和密码登录到应用程序。他们将只有执行MySQL存储过程的权限,但对存储过程内部使用的表没有SELECT、INSERT、UPDATE和DELETE权限。存储过程的定义者将是root帐户。
我对此有一个问题。也就是说:我不想在会话中以明文格式存储登录表单数据(examole的密码)。我无法使用会话将mysql连接资源对象从一个页面传输到另一个页面。
我现在正在考虑让整个web应用程序成为一个大的index.php文件。这样,当我需要MySQL连接资源时,它总是可用的。
有没有更好的方法来做到这一点?可能吧。我不想在浪费了太多工作后后悔我的选择:)。
提前谢谢你。
发布于 2012-04-02 00:13:34
存在一种称为Front Controller的设计模式,基本上它所做的就是通过一个页面为整个应用程序提供服务。您实现自己的dispatcher,dispatcher处理所有请求。例如实例化哪个对象或包括哪个页面。这限制了对未知对象的安全利用。
此外,对于会话劫持,您可以通过监视和检查
重新生成id
的
数据库部分相当令人印象深刻,但如果其他人不得不扩展、调试您的应用程序,可能会增加的复杂性。您可以使用prepared statements,甚至可以使用更好的替代ORM,比如Doctrine或Data Objects。
主要的安全漏洞是通过XSS和CSRF,因此您必须在表单中实现令牌传递机制,并检查“请求来源”。
最后,我想指出web应用程序中可能存在各种安全漏洞。为了应对这些漏洞,有很多好的框架。这些问题和漏洞都是在那里预先处理的。你可以考虑一下业务逻辑,让别人来为你处理。与流行的想法相反,使用框架实际上会使你在架构、安全性和请求方面的增长更加陡峭。
希望这能有所帮助!!干杯!
发布于 2012-04-01 23:53:01
您仍然需要将用户名和密码保存到会话中。但是不要以明文形式保存密码,请使用带有自己的哈希的openssl_encrypt和openssl_decrypt。
http://php.net/manual/en/function.openssl-encrypt.php
但是这个函数在PHP 5.3.0中出现了
发布于 2012-04-02 00:21:13
您永远不需要在会话中存储密码,也不需要为应用程序的每个用户创建单独的MySQL用户。这些东西不会让你的应用程序更安全,实际上可能会降低它的安全性。
以下是一些建议:
文件中,并将此文件包括在需要访问database.
文件中。在数据库中创建一个表来存储用户帐户,并始终在将其保存到表之前对其密码进行哈希处理。您可以使用此表在用户登录时对其进行身份验证。
文件中。可以有多个文件。
您可能希望尝试使用Symfony、CodeIgniter或CakePHP等框架,因为它们提供的教程可以帮助您创建安全的应用程序。请记住,安全性不仅仅是密码。正如Kishor所指出的,你还需要担心XSS、SQL注入、CSRF等。一个框架将真正帮助你解决这些问题。
https://stackoverflow.com/questions/9965654
复制相似问题