Security PHP:htmlspecialchars&real转义字符串"e

Security PHP:htmlspecialchars&real转义字符串"e,security,pdo,mysql-real-escape-string,quote,htmlspecialchars,Security,Pdo,Mysql Real Escape String,Quote,Htmlspecialchars,我现在正在PHP5中编程,使用PDO,不使用准备好的语句,而是使用普通查询,如下所示: $oQuery = $oDatabase->query( "SELECT Content FROM CMS WHERE Title = '". $this->TITLE ."' LIMIT 1" ); $aItem = $oQuery->fetch(); echo stripslashes($aItem['Content']); 现在我有两个问题

我现在正在PHP5中编程,使用PDO,不使用准备好的语句,而是使用普通查询,如下所示:

$oQuery = $oDatabase->query(
  "SELECT
    Content
  FROM
    CMS
  WHERE
    Title = '". $this->TITLE ."'
  LIMIT 1"
);

$aItem = $oQuery->fetch();

echo stripslashes($aItem['Content']);
现在我有两个问题:

如果我想插入一些东西,这对SQL注入是否足够保护

$something = quote($something);
这对于HTML和SQL注入来说足够了吗

$something = htmlspecialchars($something, ENT_QUOTES);
请看ENT_引号,因为这也将替换此:'

这个怎么样

$this->TITLE = mysql_real_escape_string($this->TITLE);

$oQuery = $oDatabase->query(
  "SELECT
    Content
  FROM
    CMS
  WHERE
    Title = '". $this->TITLE ."'
  LIMIT 1"
);

$aItem = $oQuery->fetch();

echo stripslashes($aItem['Content']);
还是我应该继续使用事先准备好的声明


谢谢

否,HTML和SQL根据上下文具有不同的特殊字符。因此,他们需要一种不同的、上下文敏感的处理方法


即使是使用或和引用的HTML属性值(乍一看可能类似),也有不同的特殊字符集和不同的转义序列。特别是,.

我认为你误解了一些事情

HTML注入:

htmlspecialchars将特殊字符转换为HTML实体

就是这样,它只对在网页上显示数据有用,这样就不会有人试图注入html。例如:

echo '<p> Welcome: ' . htmlspecialchars($_GET['username']) . '</p>';
例如,仅当没有参数时才使用查询

$oDatabase->query("SELECT Content FROM CMS");
否则,请随时准备避免sql注入

$oDatabase->query("SELECT Content FROM CMS");