【发布时间】:2011-05-12 13:25:06
【问题描述】:
我有很多来自$_GET 和$_POST 的用户输入...目前我总是写mysql_real_escape_string($_GET['var'])..
我想知道您是否可以立即创建一个保护、转义和清理 $_GET/$_POST 数组的函数,这样您就不必在每次处理用户输入时都处理它等等。
我在想一个函数,例如cleanMe($input),在它里面,它应该做mysql_real_escape_string、htmlspecialchars、strip_tags、stripslashes(我认为这就是让它干净和安全的全部内容) 然后返回$input。
那么这可能吗?制作一个适用于所有$_GET 和$_POST 的函数,所以你只需要这样做:
$_GET = cleanMe($_GET);
$_POST = cleanMe($_POST);
所以在你以后的代码中,当你使用例如 $_GET['blabla'] 或 $_POST['haha'] 时,它们是安全的、剥离的等等?
试了一下自己:
function cleanMe($input) {
$input = mysql_real_escape_string($input);
$input = htmlspecialchars($input, ENT_IGNORE, 'utf-8');
$input = strip_tags($input);
$input = stripslashes($input);
return $input;
}
【问题讨论】:
-
stripslashes()之后mysql_real_escape_string()...我的眼睛! -
我认为数据安全取决于他们做什么以及他们来自哪里。不一定需要您的所有治疗。
-
使用一次性主清理功能不是正确的解决方案。这就是magic quotes 失败的原因。逃避(或使用更好的解决方案,如准备好的语句)如果和何时你需要它。否则,你会发现你在错误的时间逃跑,而且往往不止一次。所有这些函数都有非常不同的用途,其中几个(例如
mysql_real_escape_string和stripslashes)本质上是相反的。请参阅 [使用 PHP 清理用户输入的最佳方法是什么? ](stackoverflow.com/questions/129677) 了解更多信息。 -
哇哇,cleanMe() 不会停止所有 xss,也不会因为
stripslashes()而停止 sqli。这是代码很痛苦。
标签: php security xss sql-injection