PHP将URL放入表单的安全方式,以防止xss/跨站点请求伪造CSRF攻击
我在php中使用html表单,如下所示: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
<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攻击的一种方法
- 第一件事是设置前端和后端的表单验证
- 您可以使用不同的php过滤方法
- 使用htmlspecialchars(),在检索数据或显示数据时将特殊字符转换为HTML实体
- 使用csrf令牌,现在什么是csrf令牌?它只不过是一个唯一的值,将由应用程序为每个表单提交事件生成,并作为输入隐藏值附加到每个表单。 同时,应用程序需要将该csrf令牌值设置到会话中,以便在提交表单时可以检查令牌值是否有效。这是保护CSRF攻击的一种方法
- 第一件事是设置前端和后端的表单验证
- 您可以使用不同的php过滤方法
- 使用htmlspecialchars(),在检索数据或显示数据时将特殊字符转换为HTML实体
mysql\u real\u escape\u string($data)代码>否!多年来,mysql.*
方法一直被弃用。使用mysqli_*或PDO,甚至更好地使用准备好的语句。@ManuToMatic我同意你的看法。我已经在使用PDO和prepared statement。@Rohit Dhiman您提供了保护表单的最佳方法之一,但这并不是我所研究的完美解决方案。thanq@AbdulRahman我已经针对sql注入和xssmysql\u real\u escape\u string($data)对其进行了测试代码>否!多年来,mysql.*
方法一直被弃用。使用mysqli_*或PDO,甚至更好地使用准备好的语句。@ManuToMatic我同意你的看法。我已经在使用PDO和prepared statement。@Rohit Dhiman您提供了保护表单的最佳方法之一,但这并不是我研究过的完美解决方案。thanq@AbdulRahman我已经针对sql注入和xssHow对csrf令牌进行了测试:)csrf代币怎么样?:)您提供了最佳的保护解决方案,现在让我转换表单并针对相同的威胁重新扫描表单。我将从扫描器中发布结果响应。您提供了最佳的保护解决方案,现在让我转换表单并针对相同的威胁重新扫描表单。我将从扫描仪发布结果响应。