PHP 将 URL 置于表单中以防止 xss / 跨站点请求伪造 CSRF 攻击的安全方法
PHP Safe way to put URL in form to protect against from xss / cross site request forgery CSRF attack
我在 php 中使用 html 表格如下:
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
.
.
</form>
但是当我测试 CSRF / XSS 攻击时,很容易注入这个页面。
有什么好的方法可以防止这种攻击?
主要防御:
选项 #1:使用准备好的语句(参数化查询)
选项 #2:使用存储过程
选项 #3:转义所有用户提供的输入
额外防御:
同时执行:最小权限
同时执行:白名单输入验证
对于选项 #3
使用此功能:
要使用函数 mysqli_real_escape_str,您需要 mysqli,以便在 codeigniter
中获取它
function get_mysqli() {
$db = (array)get_instance()->db;
return mysqli_connect('localhost', $db['username'], $db['password'],$db['database']);
}
public function filter($data)
{
$data = trim(htmlentities(strip_tags($data)));
// print_r($data);
if (get_magic_quotes_gpc()){
// print_r($data);
$data = stripslashes($data);
// print_r($data);
$data = mysqli_real_escape_string(get_mysqli(),$data);
// print_r($data);
}
return $data;
}
循环用户输入为:
foreach($_POST as $key => $value) {
$array[$key] = $this->filter($value);
}
看看这个:
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
防止 CSRF 的唯一安全方法是为每个请求关联一个密钥(csrf 令牌),然后在提交表单时检查它。你可以把它放在一个隐藏的输入中。
用于 CSRF 保护 --
- 使用csrf token,什么是csrf token,它只不过是一个唯一值,它将由您的应用程序为每个表单提交事件生成,并附加到每个表单作为输入隐藏值。
同时应用程序需要将该 csrf 令牌值设置为 SESSION,以便在提交表单时它可以检查令牌值是否有效。这是保护 CSRF 攻击的一种方法。
用于 XSS 保护 --
- 第一件事是设置前端和后端的表单验证
- 您可以使用不同的 php 过滤方法
- 使用 htmlspecialchars() 在检索数据或显示数据时将特殊字符转换为 HTML 实体
我在 php 中使用 html 表格如下:
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
.
.
</form>
但是当我测试 CSRF / XSS 攻击时,很容易注入这个页面。 有什么好的方法可以防止这种攻击?
主要防御:
选项 #1:使用准备好的语句(参数化查询)
选项 #2:使用存储过程
选项 #3:转义所有用户提供的输入
额外防御:
同时执行:最小权限
同时执行:白名单输入验证
对于选项 #3 使用此功能:
要使用函数 mysqli_real_escape_str,您需要 mysqli,以便在 codeigniter
中获取它function get_mysqli() {
$db = (array)get_instance()->db;
return mysqli_connect('localhost', $db['username'], $db['password'],$db['database']);
}
public function filter($data)
{
$data = trim(htmlentities(strip_tags($data)));
// print_r($data);
if (get_magic_quotes_gpc()){
// print_r($data);
$data = stripslashes($data);
// print_r($data);
$data = mysqli_real_escape_string(get_mysqli(),$data);
// print_r($data);
}
return $data;
}
循环用户输入为:
foreach($_POST as $key => $value) {
$array[$key] = $this->filter($value);
}
看看这个:
https://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet
防止 CSRF 的唯一安全方法是为每个请求关联一个密钥(csrf 令牌),然后在提交表单时检查它。你可以把它放在一个隐藏的输入中。
用于 CSRF 保护 --
- 使用csrf token,什么是csrf token,它只不过是一个唯一值,它将由您的应用程序为每个表单提交事件生成,并附加到每个表单作为输入隐藏值。 同时应用程序需要将该 csrf 令牌值设置为 SESSION,以便在提交表单时它可以检查令牌值是否有效。这是保护 CSRF 攻击的一种方法。
用于 XSS 保护 --
- 第一件事是设置前端和后端的表单验证
- 您可以使用不同的 php 过滤方法
- 使用 htmlspecialchars() 在检索数据或显示数据时将特殊字符转换为 HTML 实体