我的表格输入消毒功能:
select SUM(SOTRAN.ACTQTY) AS value,
case when SOTRAN.ACTQTY > 10 then
'Week of ' + CONVERT(VARCHAR(10),dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0),1) else
'Others' end AS label
from SOTRAN AS SOTRAN
WHERE (SOTRAN.tdate>='1/1/2015 12:00:00 AM'
AND SOTRAN.tdate<='12/31/2015 11:59:59 PM' )
GROUP BY case when SOTRAN.ACTQTY > 10 then
'Week of ' + CONVERT(VARCHAR(10),dateadd(wk, datediff(wk, 0, SOTRAN.tdate), 0),1) else
'Others' end;
我的SQL行:
function clean_input($data)
{
$data = trim($data);
$data = strip_tags($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
这是正确的用法吗?
答案 0 :(得分:3)
这是正确的用法吗?
不,不是。如果您在输入周围使用单引号并且未使用certain multibyte charsets,那么它将是相当安全的,但它确实不是建议的安全性或可用性/数据完整性方法。
使用准备好的陈述。使用PHP,您可以使用mysqli或PDO(另请注意this,这可能是一个问题,具体取决于您的版本/配置。)
以下是OWASP所说的内容:
第二种技术是在将用户输入放入之前将其转义 查询。然而,与使用相比,这种方法[mysqli_real_escape_string]是脆弱的 参数化查询,我们无法保证它会阻止所有SQL 在所有情况下注射。这种技术只能用于 谨慎,以经济有效的方式改进遗留代码。
让我们看一下这些功能:
the smaller sign (<) is interesting
变为the smaller sign (
)。它也不是针对任何上述攻击的正确防御,因此我不建议像这样使用它。ENT_QUOTES
),但在将数据插入数据库之前确实不应该发生,原因有两个:1。损坏的数据2这种方法可以很容易地引入XSS漏洞。 XSS是在回显数据时引入的漏洞,因此应该防止它。否则,很难记住哪些数据是安全的,哪些数据不安全。 总结:您的方法在将输入数据插入数据库之前更改输入数据,这可能会影响可用性。这甚至没有增加那么多安全性,当然也不被认为是安全性的最佳实践方法。