每当我查看某人编写的代码时,他们都会使用
$var = htmlspecialchars($var);
$var = trim($var);
$var = stripcslashes($var);
或只是
strip_tags($var)
何时使用第一个和第二个?
答案 0 :(得分:4)
htmlspecialchars
和htmlentities
用于在网页中显示文字。它会将HTML中具有特殊含义的字符(例如围绕标记的<
和>
字符)转换为其实体代码。例如,如果字符串包含
Use <table> to create a table on a web page.
它将转换为
Use <table> to create a table on a web page.
当您在网页上显示字符串时,您将正确地看到预期的消息。
strip_tags
完全删除所有HTML标记。所以上面的字符串将转换为:
Use to create a table on a web page.
如果你显示它,它没有多大意义。这通常用于清理不真正用于显示的输入,并且不应包含任何看起来像HTML标记的内容,例如用户名。虽然根据您对这些值的任何规则进行验证可能会更好(例如,用户名应该只是字母数字字符)。
在我看来,strip_tags()
几乎总是错误的工具。这是一个防止XSS攻击的简单方法,因为没有任何HTML标记的代码不能引入脚本。但这是一个广泛的画笔,通常不符合特定的需求。
在处理输入时进行这些转换通常是错误的。当您使用数据时执行它们,执行当时需要的任何转义。所以你使用mysqli_real_escape_string()
如果你将变量替换成一个查询(但你真的应该使用预备语句而不是这个),htmlentities()
当你在网页上显示它时urlencode()
Series
当你把它放入URL查询字符串等时
答案 1 :(得分:0)
在我的情况下,我在php中传递url参数时使用htmlspecialchars()。例如
<?php
<a href="pages.php?id=<? echo htmlspecialchars($id); ?>"></a>
?>
这可以防止跨站点脚本,这意味着如果用户放置一些其他代码(如javascript),它将替换保留字符。
我在表单中使用strip_tags,以防止用户将标记插入数据库。