[英]PHP Sanitising and escaping special characters
我是PHP的新手,并且有一种表单,人们可以在其中向数据库提交值。 稍后,这些值将使用JS注入,或直接放置在HTML文档中。
我正在使用以下内容来清理输入内容:
function sanitise($str){
$string = htmlspecialchars($str);
$string = mysql_real_escape_string($str);
return $string;
}
问题是在我的数据库中,带引号的输入看起来像这样: input's
。 这意味着如果我将该值插入JS内,则引号会将所有内容弄乱。
我尝试这样做以避免引用:
function sanitise($str){
$string = htmlspecialchars($str);
$string = mysql_real_escape_string($str);
return addslashes($string);
}
这会将我的数据库条目转换为如下形式: input\\'s
。 这在JS中有效,但是如果我直接在<div></div>
注入该值,则反斜杠仍然存在...我对自己做错的事情感到困惑-如何清理输入内容并同时针对HTML和JS普遍转义特殊字符?
数据消毒意味着在工作流程的不同步骤中发生不同的事情。 您也不想重复执行此操作,否则您将传播转义符。
现代的方法是尝试以正确的表示形式处理数据。 这意味着,如果您有一个名字O'Niell
那么这就是字符串的实际内容。 通常,这意味着可以按提供的方式使用来自Web浏览器的数据。 (只需确保禁用了魔术引号。)
只有当您将数据传递到其他层时,它才会被清除。 最简单的情况是在将其用作数字之前检查它是否为数字,例如查找数据库行。 下一个最简单的方法是在组装SQL时就使用mysqli_real_escape_string
函数,并且此过程不早。 (顺便说一句,使用准备好的语句将为您做到这一点。)将数据放入URL或Javascript同样也是如此:在发出数据时对数据进行转义。
尽早这样做可以解决两个问题。 首先是您没有使用转义数据的问题。 第二个是,您不必两次转义数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.