首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP安全方式将URL放在表单中以防止xss /跨站点请求伪造CSRF攻击

问PHP安全方式将URL放在表单中以防止xss /跨站点请求伪造CSRF攻击
EN

Stack Overflow用户
提问于 2016-08-19 05:38:44
回答 3查看 418关注 0票数 0

我在php中使用html表单,如下所示:

代码语言:javascript
复制
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
.
.
</form>

但是当我测试CSRF / XSS攻击时,很容易注入这个页面。有什么好办法来防止这种攻击吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-19 06:27:14

为CSRF保护

  • 使用csrf令牌,现在什么都是csrf令牌,它只不过是一个独特的值,它将由您的应用程序为每个表单提交事件生成,并作为输入隐藏值发送到每个表单。同时,应用程序需要将csrf令牌值设置为会话,以便在表单提交时可以检查令牌值是否有效。这是一种保护CSRF攻击的方法。

对XSS的保护--

  • 第一件事是将表单验证设置为前端和后端。
  • 您可以使用不同的php筛选方法。
  • 使用htmlspecialchars(),在检索数据或显示数据时将特殊字符转换为HTML实体
票数 3
EN

Stack Overflow用户

发布于 2016-08-19 06:13:58

防范CSRF的唯一安全方法是将一个秘密密钥(csrf令牌)与每个请求关联起来,然后在表单提交时检查它。你可以把它放在一个隐藏的输入中。

票数 1
EN

Stack Overflow用户

发布于 2016-08-19 05:43:28

一级防御

选项1:使用准备好的语句(参数化查询)

备选案文2:使用存储过程

选项3:转义所有用户提供的输入

附加防御

还强制执行:最少特权

还执行:白名单输入验证

选项3的使用以下函数:

要使用函数mysqli_real_escape_str,您需要mysqli,以便在代码点火器中获得它

代码语言:javascript
复制
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;       
    }

循环用户输入如下:

代码语言:javascript
复制
foreach($_POST as $key => $value) {
    $array[$key] = $this->filter($value);
}

看看这个:

Sheet

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39031791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档