Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将URL放入表单的安全方式,以防止xss/跨站点请求伪造CSRF攻击_Php_Forms_Xss_Csrf - Fatal编程技术网

PHP将URL放入表单的安全方式,以防止xss/跨站点请求伪造CSRF攻击

PHP将URL放入表单的安全方式,以防止xss/跨站点请求伪造CSRF攻击,php,forms,xss,csrf,Php,Forms,Xss,Csrf,我在php中使用html表单,如下所示: <form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>"> . . </form> 主要防御主要防御: 选项1:使用准备好的语句(参数化查询) 选项2:使用存储过程 选项3:转义所有用户提供的输入 附加防御措施: 还强制执行:最小特权 同时执行:白名单输入验证 用于选项3 使用此功能: 要使用函数mysqli\u real\u escape\u

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

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

主要防御主要防御

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

选项2:使用存储过程

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

附加防御措施

还强制执行:最小特权

同时执行:白名单输入验证

用于选项3 使用此功能:

要使用函数mysqli\u real\u escape\u 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);
}
看看这个:


主要防御

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

选项2:使用存储过程

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

附加防御措施

还强制执行:最小特权

同时执行:白名单输入验证

用于选项3 使用此功能:

要使用函数mysqli\u real\u escape\u 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);
}
看看这个:


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

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

用于CSRF保护--

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

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

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

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

mysql\u real\u escape\u string($data)否!多年来,
mysql.*
方法一直被弃用。使用mysqli_*或PDO,甚至更好地使用准备好的语句。@ManuToMatic我同意你的看法。我已经在使用PDO和prepared statement。@Rohit Dhiman您提供了保护表单的最佳方法之一,但这并不是我所研究的完美解决方案。thanq@AbdulRahman我已经针对sql注入和xss
mysql\u real\u escape\u string($data)对其进行了测试否!多年来,
mysql.*
方法一直被弃用。使用mysqli_*或PDO,甚至更好地使用准备好的语句。@ManuToMatic我同意你的看法。我已经在使用PDO和prepared statement。@Rohit Dhiman您提供了保护表单的最佳方法之一,但这并不是我研究过的完美解决方案。thanq@AbdulRahman我已经针对sql注入和xssHow对csrf令牌进行了测试:)csrf代币怎么样?:)您提供了最佳的保护解决方案,现在让我转换表单并针对相同的威胁重新扫描表单。我将从扫描器中发布结果响应。您提供了最佳的保护解决方案,现在让我转换表单并针对相同的威胁重新扫描表单。我将从扫描仪发布结果响应。