我有很多来自 $_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;
}
最佳答案
通用卫生功能的想法是一个错误的概念。
一种适合各种用途的正确卫生方法。在字符串上不加选择地运行它们通常会破坏它 - 为 SQL 查询转义一段 HTML 代码会破坏它以在网页中使用,反之亦然。应在使用数据之前应用卫生设施:
在运行数据库查询之前。正确的卫生方法取决于您使用的图书馆;它们列于 How can I prevent SQL injection in PHP?
htmlspecialchars()
用于安全的 HTML 输出preg_quote()
用于正则表达式escapeshellarg()
/escapeshellcmd()
用于外部命令等等。等等。
使用“一刀切”的卫生功能就像在植物上使用五种剧毒杀虫剂,根据定义,这种杀虫剂只能含有一种 bug - 只是发现你的植物被第六种虫害,任何杀虫剂都不起作用。
始终使用一种正确的方法,最好是在将数据传递给函数之前直接使用。 除非需要,否则不要混合方法。
关于php - 终极清洁/安全功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4223980/