Php 我应该使用htmlspecialchars还是mysql\u real\u escape\u字符串,或者两者都使用

Php 我应该使用htmlspecialchars还是mysql\u real\u escape\u字符串,或者两者都使用,php,Php,我已经让用户输入了一些信息(姓名、出生日期等)。然后我必须将这些值插入数据库。我应该使用它们来防止mysql注入和处理html标记吗?它们都需要还是其中一个可以 如果我只使用其中一个,那么是哪一个? 如果我两个都用,那么先用哪一个,最后用哪一个 我应该使用mysql\u real\u escape\u字符串来防止mysql注入吗 没有。这将要求您停止使用过时的mysql.*库,转而使用更现代化的库(如PDO) 和htmlspecialchars来处理html标记,两者或其中一个都可以完成这项工作

我已经让用户输入了一些信息(姓名、出生日期等)。然后我必须将这些值插入数据库。我应该使用它们来防止mysql注入和处理html标记吗?它们都需要还是其中一个可以

如果我只使用其中一个,那么是哪一个? 如果我两个都用,那么先用哪一个,最后用哪一个

我应该使用mysql\u real\u escape\u字符串来防止mysql注入吗

没有。这将要求您停止使用过时的
mysql.*
库,转而使用更现代化的库(如PDO)

和htmlspecialchars来处理html标记,两者或其中一个都可以完成这项工作


使用
htmlspecialchars
将数据插入HTML文档。数据库不是HTML文档。(稍后您可能会将数据从数据库中取出并放入HTML文档,这是使用
htmlspecialchars
)的时候了。

No
mysql\u real\u escape\u string()
!你应该使用。它使用预先准备好的语句,这些语句不会受到注入攻击,因为MySQL首先被赋予未经参数化的SQL,然后被赋予要插入的数据

例如:

$dbh = new PDO();
$stmt = $dbh->prepare('INSERT INTO data (something) VALUE(:userInput)');

// No mysql_real_escape_string necessary
$stmt->execute(array(
    ':userInput' => $_POST['userInput']
));
htmlspecialchars()
不应在所有输入上使用,但应使用它!虽然通常在从数据库中检索数据之后应用(不过,最好在检索之前应用,以防之后忘记),但它对于用户输入非常有用,您将在HTML页面中回显。它可以保护您免受XSS(跨站点脚本)攻击,在XSS攻击中,恶意用户可以将包含恶意代码的标签添加到站点的输入字段中。当其他用户访问该恶意用户发布的页面时,他们的浏览器将解释恶意脚本,这可能会导致窃取会话ID或尝试CSRF(跨站点请求伪造)等行为

底线:在将任何用户内容回显到页面之前,应该先使用它。除非该内容已通过严格的筛选(如仅接受mm/dd/yy的生日筛选)验证。如果你不确定,那么无论如何都要使用它。不会痛的。这只会有帮助

进一步阅读:


您将输入编码和输出编码混为一谈-简而言之,
mysql\u real\u escape\u string()
=对进入数据库的数据进行编码(这是不必要的,因为当前的“最佳实践”是使用参数化查询),
htmlspecialchars()
是向用户显示内容时的输出编码。输出编码是绝对必要的。我推荐各种OWASP备忘单/参考资料作为进一步阅读。