csrf ... php 表单安全
csrf ... php form security
我正在创建一个具有多种不同访问级别的网站,从基本用户到管理员级别(总共 5 个)
经理和管理员级别可以选择添加级别等于或低于他们的新用户,这是通过 createNewUser 页面上的下拉框完成的,我已经将其限制为仅显示小于或等于他们自己的访问级别...但是...我要阻止的是...
用户加载站点,从源(包括 CSRF 令牌)获取表单副本,在桌面上创建一个简单的 HTML 表单修改访问级别设置,他们实际上可以非常容易地生效创建一个管理员级别的帐户...
有没有一种方法可以使用 CSRF 来阻止它...或者我应该只依赖原点来阻止它来自 'off server' 来源
在为此设置 CSRF 时,我也希望获得一些关于最佳实践的提示...
网站上还有其他具有类似功能的表格,所以我认为这需要一个符合表格的解决方案
干杯......哦,尽可能保持简单:)
这就是我正在使用的,我希望这是一个好的解决方案
在主页上我启动会话并生成会话令牌
session_start();
if (empty($_SESSION['token'])) {
$_SESSION['token'] = bin2hex(random_bytes(32));
}
我正在使用 bin2hex
但您也可以尝试其他哈希方法。
在登录 php 页面添加这个
if (isset($_POST['Login']) && !empty($_POST['token'])) {
if (hash_equals($_SESSION['token'], $_POST['token'])) {
//execute script
}
}
检查会话令牌是否启动以及是否匹配 html 输入值。
将此隐藏标记输入添加到 html 表单中 $_POST['token']
<input type="hidden" name="token" value="<?php echo $_SESSION['token'];?>">
is there a way to stop this using CSRF ... or should I just rely on the origin to stop it from coming from an 'off server' source
不,这两种方法都行不通。用户可以使用 Web 检查器或通过从真实页面复制 CSRF 令牌轻松地注入新值。
检查您的输入!! 如果用户尝试添加新用户,请在让他们继续之前查看他们的权限。不要依赖于输入表单来应用这些限制。
出于其他原因(例如,防止恶意网站劫持管理员会话),应用 CSRF 检查仍然是一个好主意,但它无法保护您免受授权用户的侵害。
我正在创建一个具有多种不同访问级别的网站,从基本用户到管理员级别(总共 5 个)
经理和管理员级别可以选择添加级别等于或低于他们的新用户,这是通过 createNewUser 页面上的下拉框完成的,我已经将其限制为仅显示小于或等于他们自己的访问级别...但是...我要阻止的是...
用户加载站点,从源(包括 CSRF 令牌)获取表单副本,在桌面上创建一个简单的 HTML 表单修改访问级别设置,他们实际上可以非常容易地生效创建一个管理员级别的帐户...
有没有一种方法可以使用 CSRF 来阻止它...或者我应该只依赖原点来阻止它来自 'off server' 来源
在为此设置 CSRF 时,我也希望获得一些关于最佳实践的提示...
网站上还有其他具有类似功能的表格,所以我认为这需要一个符合表格的解决方案
干杯......哦,尽可能保持简单:)
这就是我正在使用的,我希望这是一个好的解决方案
在主页上我启动会话并生成会话令牌
session_start();
if (empty($_SESSION['token'])) {
$_SESSION['token'] = bin2hex(random_bytes(32));
}
我正在使用 bin2hex
但您也可以尝试其他哈希方法。
在登录 php 页面添加这个
if (isset($_POST['Login']) && !empty($_POST['token'])) {
if (hash_equals($_SESSION['token'], $_POST['token'])) {
//execute script
}
}
检查会话令牌是否启动以及是否匹配 html 输入值。
将此隐藏标记输入添加到 html 表单中 $_POST['token']
<input type="hidden" name="token" value="<?php echo $_SESSION['token'];?>">
is there a way to stop this using CSRF ... or should I just rely on the origin to stop it from coming from an 'off server' source
不,这两种方法都行不通。用户可以使用 Web 检查器或通过从真实页面复制 CSRF 令牌轻松地注入新值。
检查您的输入!! 如果用户尝试添加新用户,请在让他们继续之前查看他们的权限。不要依赖于输入表单来应用这些限制。
出于其他原因(例如,防止恶意网站劫持管理员会话),应用 CSRF 检查仍然是一个好主意,但它无法保护您免受授权用户的侵害。