2016-08-19 48 views

回答

3

对于CSRF保护 -

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

对于XSS防护 -

  • 1日的事情被设置表单验证两者的前端和后端
  • 你可以使用不同的PHP过滤方法
  • 使用用htmlspecialchars(),它转换的特殊字符到HTML实体检索数据或显示数据时
+0

你提供了一个最好的解决方案来保护,现在让我转换窗体并重新扫描窗体对相同的威胁。我将发布扫描仪产生的响应。 –

-1

主要防御

选项#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://www.owasp.org/index.php/SQL_Injection_Prevention_Cheat_Sheet

+1

'mysql_real_escape_string($ data);'** no **!多年来,'mysql_ *'方法已被弃用。使用mysqli_ *或PDO,甚至更好地使用预准备语句。 – Bobby

+1

@ManuToMatic我同意你的意见。我已经在准备好声明中使用PDO。 –

+1

好的,让我纠正 –

1

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

相关问题