繁体   English   中英

PHP清理和转义特殊字符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM