Moe*_*ini 0 php xss sql-injection
我阅读了很多关于过滤数据的信息,我的网站从用户处获取数据,以便在sql injenction和xss中使网站安全...但我在php中看到很多功能,所以我无法决定做什么...请帮我把它变得更安全
你在这里问几个问题,所以我会试着把它分解:
将用户输入直接传递给数据库时会发生这种情况,如下所示:
$query = "SELECT * FROM Table WHERE field = " . $_POST['field'];
$result = mysql_query($query);
Run Code Online (Sandbox Code Playgroud)
用户可以将他们想要的任何内容放入表单上的"字段"字段中,数据库将执行它.这意味着用户可以输入恶意字符串,该字符串会过早地终止您的预期查询,然后运行自己的查询.
不要使用用户输入直接构造查询.相反,您应该考虑使用预准备语句(这通常使用PDO库处理).准备好的语句可以采用多种形式,但它们都涉及在实际查询字符串中使用占位符来告诉数据库在哪里粘贴您稍后将传递的其他数据.这样,数据库就可以处理任何适当的转义.代码看起来有点像这样:
$statement = $db->prepare("SELECT * FROM Table WHERE field = :field");
$statement->bindValue(":field", $_GET['field']);
$statement->execute();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,:field指示稍后提供的值的占位符bindValue.PDO将根据需要处理转义.
也就是说,您仍应根据需要清理任何用户数据.
当未经过处理的用户输入直接传递回浏览器时,会发生跨站点脚本(XSS).如果用户输入了JavaScript命令,则可以在其他用户浏览器中执行这些命令,这可能允许原始黑客获得对该用户凭据的访问权.
我不会在这里详细介绍,我只是说可以通过在你设置的任何cookie上设置HttpOnly标志来避免这种情况,这样就无法用JavaScript(恶意或其他)访问它们,从来没有,永远不会向用户回送未经过处理的输入.
PHP内置了一些很好的功能,可以清理许多形式的用户输入.我只是建议你查看它可以应用的filter_var功能和各种过滤器.
永远不要只是将用户输入回送给用户.您应该尽力验证输入并拒绝任何不符合的输入,但对于需要显示给用户的输入,请始终使用类似的输入htmlentities().对于更重但更彻底的选项,您可以查看HTML Purifier库.
希望能让你开始朝着正确的方向前进.