我有很多用户输入$_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);
那么在以后的代码中,当您使用eg $_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; }
Pekka suppor.. 126
通用卫生功能的概念是一个破碎的概念.
有一个适用于各种用途的权利卫生法.在字符串上不加选择地运行它们通常会破坏它 - 为SQL查询转义一段HTML代码会破坏它以便在网页中使用,反之亦然.在使用数据之前应该应用卫生设施:
在运行数据库查询之前.正确的卫生方法取决于您使用的库; 它们列在我如何在PHP中阻止SQL注入?
htmlspecialchars()
用于安全的HTML输出
preg_quote()
用于正则表达式
escapeshellarg()
/ escapeshellcmd()
用于外部命令
等等
使用"一刀切"的卫生功能就像在植物上使用五种高毒性杀虫剂,根据定义,它只含有一种虫子 - 只是发现你的植物被第六种侵染,没有杀虫剂的作用.
在将数据传递给函数之前,始终使用一种正确的方法,理想情况下是直接的.除非您需要,否则不要混用方法.
通用卫生功能的概念是一个破碎的概念.
有一个适用于各种用途的权利卫生法.在字符串上不加选择地运行它们通常会破坏它 - 为SQL查询转义一段HTML代码会破坏它以便在网页中使用,反之亦然.在使用数据之前应该应用卫生设施:
在运行数据库查询之前.正确的卫生方法取决于您使用的库; 它们列在我如何在PHP中阻止SQL注入?
htmlspecialchars()
用于安全的HTML输出
preg_quote()
用于正则表达式
escapeshellarg()
/ escapeshellcmd()
用于外部命令
等等
使用"一刀切"的卫生功能就像在植物上使用五种高毒性杀虫剂,根据定义,它只含有一种虫子 - 只是发现你的植物被第六种侵染,没有杀虫剂的作用.
在将数据传递给函数之前,始终使用一种正确的方法,理想情况下是直接的.除非您需要,否则不要混用方法.
简单地通过所有这些函数传递输入是没有意义的.所有这些功能都有不同的含义.通过调用更多的escape函数,数据不会变得"干净".
如果要在MySQL中存储用户输入,则只需使用mysql_real_escape_string
.然后完全转义以安全地存储在数据库中.
编辑
另请注意使用其他功能时出现的问题.如果客户端向服务器发送了一个用户名,并且用户名包含一个&符号(&
),那么htmlentities
在将其存储到数据库中之前,您不想调用,因为数据库中的用户名将包含&
.
你在找filter_input_array()
.但是,我建议仅将其用于业务样式验证/清理而不是SQL输入过滤.
为了防止SQL注入,请使用带有mysqli或PDO的参数化查询.