我使用HTML表单在PHP如下:PHP安全的方式把URL的形式,以防止从XSS /跨站请求伪造跨站请求伪造攻击
但是,当我测试CSRF/XSS攻击,注入这个页面非常容易。 有没有什么好的方法来保护免受这种类型的攻击?
我使用HTML表单在PHP如下:PHP安全的方式把URL的形式,以防止从XSS /跨站请求伪造跨站请求伪造攻击
但是,当我测试CSRF/XSS攻击,注入这个页面非常容易。 有没有什么好的方法来保护免受这种类型的攻击?
对于CSRF保护 -
对于XSS防护 -
你提供了一个最好的解决方案来保护,现在让我转换窗体并重新扫描窗体对相同的威胁。我将发布扫描仪产生的响应。 –
主要防御:
选项#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
'mysql_real_escape_string($ data);'** no **!多年来,'mysql_ *'方法已被弃用。使用mysqli_ *或PDO,甚至更好地使用预准备语句。 – Bobby
@ManuToMatic我同意你的意见。我已经在准备好声明中使用PDO。 –
好的,让我纠正 –
,以防止CSRF的唯一安全的方法是密钥(CSRF令牌)与每个请求相关联,然后检查它在形式提交。你可以把它放在隐藏的输入中。
csrf令牌如何? :) – Gogol