PHP安全检查表(注入,会话等)

时间:2010-12-30 08:54:07

标签: php mysql security sql-injection

因此,使用PHP和MySql的人应该关注什么样的事情才能最大限度地提高安全性。

我做过的事情:
-mysql_real_escape_string所有输入
- 转义em后,对所有输入进行验证 - 在我的表名之前放置随机字母数字 -50character salt + Ripemd密码

在我认为我在懈怠的地方: - 我知道会话和保护它们一无所知。如果你所做的一切是不安全/安全的话:

session_start(); 
$_SESSION['login']= $login;

并检查:

session_start();
if(isset($_SESSION['login'])){

- 我听说过其他形式的注射,如交叉部位注射,什么不是...... - 可能还有很多我不知道的事情。

是否有关于使php安全的“清单”/ Quicktut?我甚至不知道我应该担心什么。我有点后悔现在没有建立起cakephp,因为我不是专业人士。

4 个答案:

答案 0 :(得分:2)

您可以尝试通过测试用户代理来避免劫持。

类似的东西:

if (isset($_SESSION['userAgent'])) {
    if ($_SESSION['userAgent'] != md5($_SERVER['HTTP_USER_AGENT'])) {
       // HACK !!!
       // Kill the process or ask for authenticating
    }
}
else {
    $_SESSION['userAgent'] = md5($_SERVER['HTTP_USER_AGENT']);
}

答案 1 :(得分:1)

如果您的应用程序允许发布任何类型的内容,您应该在登录时使用某种加密方式。 SSL当然是最好的,可怜的人ssl在发布登录表单之前用JS加密密码。

为了避免会话劫持,请在登录时将会话绑定到ip,(在登录时保存ip并与每个请求进行比较)。

的问候, //吨

答案 2 :(得分:1)

对于XSS和其他注入类型,主要是HTML和js注入,关键安全性是逃避所有输出。您粘贴在HTML中的所有内容都应该转换为HTML,这意味着浏览器中不应该看到任何js或HTML由直接来自数据库的东西生成的内容。

作为示例user_name,表单中设置的用户不应包含任何HTML或js代码。如果有人注入这样的东西,你会遇到一些问题(最简单的注入方式是大多数应用程序中的搜索表单输入,如果你的搜索在响应页面中回显)。因此,所有这些输出应该在输出之前有一个htmlspecialchars()。

以下是一些有用的链接:

答案 3 :(得分:0)

有多种黑客攻击方式。首先是当一个实际(或假的)用户试图找到软件中的空白以试图损坏您的服务器时。您将需要转义和输入检查以防止SQL注入解决此问题。

(或'an')其他人是试图窃取会话以冒充其他用户的黑客。这允许他们到达(和更改)他们无权获得的数据。

使用mysql_real_escape_string修复SQL注入。当使用它并使用它时,没有必要害怕SQL注入。无需在表名前添加随机字符。这将使您的编程更难,同时不提供真正的额外安全性。 您还可以使用mysqli和参数化查询,这些查询完全没有此问题。 mysqli负责为您逃脱。从理论上讲,参数化查询甚至可以更快地运行,因为可以更有效地缓存查询。然而,在实践中,情况并非如此。只有从MySQL 5.2开始,这些查询才会被缓存,但仍然没有那么高效。然而,现在无需担心。任何解决方案现在都可以为您提供足够好的表现。

您不应该做的一件事 - 允许在用户生成的内容中使用PHP代码。如果您允许用户键入PHP,您将允许他们破坏您的应用程序并可能修改您的数据库。此外,当黑客设法冒充用户/内容编辑器时,当您允许内容包含PHP时,他会免费获得一个完整的工具箱。

为防止会话被劫持,我认为最好使用SSL。如果您不想通过SSL为所有页面提供服务,则可以选择在cookie中保存会话,但只要进行了重要更改,就需要重新登录(使用SSL)。