2009-12-15 204 views
0

我正在构建一个从头开始具有注册和登录功能的Web应用程序。当涉及到安全问题和攻击如mysql注入时,我完全是新手。除了数据库中的密码加密之外,还有哪些其他安全问题需要我担心?我该如何照顾他们? 谢谢安全问题登录注册系统使用php javascript mysql

回答

2

你需要确保消毒在SQL所有变量,如果你不使用类似PDO这是与mysql_real_escape_string

例如做最容易,当你正在检查用户凭据您的代码会看起来是这样的:

$sql = "SELECT `id` FROM `users` WHERE `username` = '".mysql_real_escape_string($_POST['username'])."' AND `password` = '".mysql_real_escape_string($_POST['password'])."'"; 
$dosql = mysql_query($sql); // etc 

这也是值得添加以下到您的登录程序,以防止session fixation

session_regenerate_id(true); 
+0

如果你传递的是一个整数而不是字符串,不要使用'mysql_real_escape_string',而是先转换它,就像'(int)$ myInt' – philfreo 2009-12-15 23:36:44

1

你真的需要注意的一件事是Cross-site Request Forgery(CSRF或XSRF)。防止它最简单的方法是发送一个令牌与每个请求(甚至发送登录cookie的副本将工作)。

1

您还必须担心跨站点脚本攻击。 (通常缩写为XSS)基本上,这意味着如果您的应用程序曾经将用户提交的数据提交给后续页面的HTML部分,则必须对其进行消毒。例如,如果您的应用程序是留言板,恶意用户可以使用嵌入式HTML创建帖子,以便在用户不知情的情况下加载远程javascript。

防御它的一个简单方法是使用将HTML字符编码为实体代码的函数对作为Web应用程序HTML的一部分的任何数据进行编码。在PHP中,您可以使用htmlspecialchars()

但是,你应该考虑更多。 OWASP(开放Web应用程序安全项目)是真正创建这一领域标准的行业组织。他们发布了OWASP Top Ten列表,列出了10个最流行的安全漏洞。你会看到这些答案中提到的所有内容。

1

搜索“登录安全问题”时,有许多优秀的文章。这个很棒:most common security mistakes。仔细阅读每一个有投票权的答案,并确保你知道这意味着什么,并且你没有犯这个错误。总之,为了安全起见,您必须假设用户的每一条数据都可能是恶意的。