在下面的场景中,$ user_id是用户输入的字符串。
我想知道我是否仍然需要先使用$email = htmlentities($_POST["email"])
和$name= htmlentities($_POST["name"])
来解除字符串?
$query = "INSERT INTO user ('email','name') VALUES (?,?)";
$this->_query = $this->_pdo->prepare($query);
$this->_query->bindValue(1, $email);
$this->_query->bindValue(2, $name);
$this->_query->execute();
我看到有些人在插入查询之前没有转义输入,但是在回显之前它们会转义数据。为什么要这样做?
$query = "SELECT * FROM users WHERE id = ?";
$this->_query = $this->_pdo->prepare($query);
$this->_query->bindValue(1, $user_id);
$this->_query->execute();
$data = $this->_query->fetchAll(PDO::FETCH_ASSOC);
$output = $data[0]["name"];
$output = htmlentities($output);
echo output;
在查询之前和之后使用htmentities()是否有必要?
答案 0 :(得分:1)
如果您使用准备好的查询,则不需要转义/转换HTML以避免SQL注入。至于何时需要使用htmlentities
或htmlspecialchars
,如果您将用户提供的数据输出到网页,则需要使用accesschk.exe system -q -d $env:temp
或$service = Get-WmiObject -EnableAllPrivileges Win32_Service | Where-Object {$_.Name -eq "wlidsvc"}
$desc = (($service.GetSecurityDescriptor()).Descriptor).owner
$desc.Domain + "\"+$desc.name | %{.\accesschk.exe $_ -q -d $env:temp}
。不这样做会使您容易受到XSS(跨站点脚本)注入,即。在页面加载时在浏览器中执行的恶意javascript。推荐阅读:XSS Prevention Cheat Sheet和PHP Security Cheat Sheet。
除了SQL和XSS注入防护之外,您还可能需要对用户输入进行其他检查,例如在将数据输入到数据库之前验证电子邮件地址,用户名字符等。否则,你需要在路上进行一些繁琐的数据库清理工作。您可能需要查看PHP's filter functions,删除白名单字符范围之外的所有内容的基本正则表达式等。
答案 1 :(得分:1)
没有;参数化查询对SQL注入攻击是安全的。
&安培; 3.这是使用lib
,它并不完全转义输出。使用它的主要好处是它可以保护您免受XSS attacks的攻击,这与SQL注入非常不同。这会清理用户输入并阻止用户在您的网页上运行恶意tsconfig.json
。