我已经看到了很多相互矛盾的答案.很多人都喜欢引用单独的php函数不会保护你免受xss的攻击.
什么XSS确实可以通过htmlspecialchars和什么可以通过htmlentities?
我理解功能之间的区别,但不是你留下的不同级别的xss保护.谁能解释一下?
问题:防止XSS(跨站点脚本)strip_tags在任何已保存的输入字段上使用并htmlspecialchars在任何显示的输出上运行...并使用PHP PDO预处理语句阻止SQL注入?
这是一个例子:
// INPUT: Input a persons favorite color and save to database
// this should prevent SQL injection ( by using prepared statement)
// and help prevent XSS (by using strip_tags)
$sql = 'INSERT INTO TABLE favorite (person_name, color) VALUES (?,?)';
$sth = $conn->prepare($sql);
$sth->execute(array(strip_tags($_POST['person_name']), strip_tags($_POST['color'])));
// OUTPUT: Output a persons favorite color from the database
// this should prevent XSS (by using htmlspecialchars) when displaying
$sql = 'SELECT …Run Code Online (Sandbox Code Playgroud) function sanitizeString($var)
{
$var = stripslashes($var);
$var = htmlentities($var);
$var = strip_tags($var);
return $var;
}
function sanitizeMySQL($var)
{
$var = mysql_real_escape_string($var);
$var = sanitizeString($var);
return $var;
}
Run Code Online (Sandbox Code Playgroud)
我从一本书中得到了这两个函数,作者说通过使用这两个函数,我可以对XSS(第一个函数)和sql注入(第二个函数)更加安全.这些都是必要的吗?
另外,对于清理,我使用预准备语句来防止sql注入.
我会像这样使用它:
$variable = sanitizeString($_POST['user_input']);
$variable = sanitizeMySQL($_POST['user_input']);
Run Code Online (Sandbox Code Playgroud)
编辑:摆脱第一个函数的strip_tags,因为它没有做任何事情.使用这两个功能是否足以阻止大多数攻击并且对公共站点没问题?