当前位置:  开发笔记 > 编程语言 > 正文

最终的清洁/安全功能

如何解决《最终的清洁/安全功能》经验,为你挑选了3个好方法。

我有很多用户输入$_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()用于外部命令

等等

使用"一刀切"的卫生功能就像在植物上使用五种高毒性杀虫剂,根据定义,它只含有一种虫子 - 只是发现你的植物被第六种侵染,没有杀虫剂的作用.

在将数据传递给函数之前,始终使用一种正确的方法,理想情况下是直接的.除非您需要,否则不要混用方法.



1> Pekka suppor..:

通用卫生功能的概念是一个破碎的概念.

一个适用于各种用途的权利卫生法.在字符串上不加选择地运行它们通常会破坏它 - 为SQL查询转义一段HTML代码会破坏它以便在网页中使用,反之亦然.使用数据之前应该应用卫生设施:

在运行数据库查询之前.正确的卫生方法取决于您使用的库; 它们列在我如何在PHP中阻止SQL注入?

htmlspecialchars() 用于安全的HTML输出

preg_quote() 用于正则表达式

escapeshellarg()/ escapeshellcmd()用于外部命令

等等

使用"一刀切"的卫生功能就像在植物上使用五种高毒性杀虫剂,根据定义,它只含有一种虫子 - 只是发现你的植物被第六种侵染,没有杀虫剂的作用.

在将数据传递给函数之前,始终使用一种正确的方法,理想情况下是直接的.除非您需要,否则不要混用方法.


我们通过magic_quotes进行了"自动化卫生".再也不.
@Toby如果你觉得适合拒绝有效(并且顺便说一下,接受)的答案,因为你不喜欢它的选择,那么这当然是你的特权.但我个人认为这是愚蠢的.
"不要越过溪流"
我想补充一点,考虑使用预准备语句(PDO或mysqli)代替数据库查询是非常值得的.
@Mchl +1这可能是PHP解决方案中不安全因素的首要原因*.它基本上鼓励程序员无知:)
+1你头上的钉子,漏洞完全取决于数据的使用方式.

2> Tomas..:

简单地通过所有这些函数传递输入是没有意义的.所有这些功能都有不同的含义.通过调用更多的escape函数,数据不会变得"干净".

如果要在MySQL中存储用户输入,则只需使用mysql_real_escape_string.然后完全转义以安全地存储在数据库中.

编辑

另请注意使用其他功能时出现的问题.如果客户端向服务器发送了一个用户名,并且用户名包含一个&符号(&),那么htmlentities在将其存储到数据库中之前,您不想调用,因为数据库中的用户名将包含&.



3> Alan Pearce..:

你在找filter_input_array().但是,我建议仅将其用于业务样式验证/清理而不是SQL输入过滤.

为了防止SQL注入,请使用带有mysqli或PDO的参数化查询.

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有