【问题标题】:PHP Safe way to put URL in form to protect against from xss / cross site request forgery CSRF attack将 URL 放入表单以防止 xss / 跨站点请求伪造 CSRF 攻击的 PHP 安全方法
【发布时间】:2016-12-26 04:29:02
【问题描述】:

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

<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
.
.
</form>

但是当我测试 CSRF / XSS 攻击时,很容易注入这个页面。 有什么好的方法可以防止此类攻击吗?

【问题讨论】:

  • csrf 令牌怎么样? :)

标签: php forms xss csrf


【解决方案1】:

对于 CSRF 保护 --

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

对于 XSS 保护 --

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

【讨论】:

  • 您提供了最佳的保护解决方案,现在让我转换表单并重新扫描表单以抵御相同的威胁。我将发布我的扫描仪的结果响应。
【解决方案2】:

主要防御

选项 #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

【讨论】:

  • mysql_real_escape_string($data); 没有mysql_* 方法已被弃用多年。使用 mysqli_* 或 PDO,甚至更好地使用准备好的语句。
  • @ManuToMatic 我同意你的看法。我已经在使用 PDO 和准备好的语句。
  • @Rohit Dhiman 您提供了保护表单的最佳方法之一,但它并不是我研究的完美解决方案。
  • thanq @AbdulRahman 我已经针对 sql 注入和 xss 对其进行了测试
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-14
    • 2014-06-02
    • 2015-07-08
    • 2019-03-24
    • 2017-01-09
    • 2019-05-26
    • 2011-01-11
    • 2017-01-10
    相关资源
    最近更新 更多