我在php中使用html表单,如下所示:
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
.
.
</form>但是当我测试CSRF / XSS攻击时,很容易注入这个页面。有什么好办法来防止这种攻击吗?
发布于 2016-08-19 06:27:14
为CSRF保护
对XSS的保护--
发布于 2016-08-19 06:13:58
防范CSRF的唯一安全方法是将一个秘密密钥(csrf令牌)与每个请求关联起来,然后在表单提交时检查它。你可以把它放在一个隐藏的输入中。
发布于 2016-08-19 05:43:28
一级防御
选项1:使用准备好的语句(参数化查询)
备选案文2:使用存储过程
选项3:转义所有用户提供的输入
附加防御
还强制执行:最少特权
还执行:白名单输入验证
选项3的使用以下函数:
要使用函数mysqli_real_escape_str,您需要mysqli,以便在代码点火器中获得它
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://stackoverflow.com/questions/39031791
复制相似问题