最终的清洁/安全功能

最终的清洁/安全功能

我有很多来自$_GET$_POST..现在我总是写mysql_real_escape_string($_GET['var'])..

我想知道您是否可以创建一个函数来保护、逃避和清除$_GET/$_POST数组,所以您不必每次处理用户输入之类的问题。

我在想一个函数,例如cleanMe($input),在里面,它应该可以mysql_real_escape_stringhtmlspecialcharsstrip_tagsstripslashes(我认为这将使它变得干净和安全),然后返回$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;}


神不在的星期二
浏览 508回答 3
3回答

红颜莎娜

关于一般卫生功能的想法是一个破碎的概念。的确有一正确的卫生方法适用于各种用途。在字符串上不加区分地运行它们通常会破坏字符串-为SQL查询转义一段HTML代码会破坏它,以便在网页中使用,反之亦然。卫生设施应适用就在那之前利用这些数据:在运行数据库查询之前。正确的卫生方法取决于您使用的库;如何防止PHP中的SQL注入?htmlspecialchars()为了获得安全的HTML输出preg_quote()用于正则表达式escapeshellarg() / escapeshellcmd()用于外部命令等使用“一刀切”的卫生功能就像在植物上使用五种毒性很高的杀虫剂,根据定义,这种杀虫剂只能包含一种虫子-结果却发现你的植物受到第六种杀虫剂的侵扰,而这些杀虫剂都不起作用。始终使用正确的方法,最好是在将数据传递给函数之前直接使用。绝不可能混合方法,除非你需要。

江户川乱折腾

简单地通过所有这些函数传递输入是没有意义的。所有这些功能都有不同的含义。数据不能通过调用更多的转义函数而变得“更干净”。如果要将用户输入存储在MySQL中,则只需使用mysql_real_escape_string..然后将其完全转义,以安全地存储在数据库中。编辑还请注意使用其他函数时出现的问题。例如,如果客户端向服务器发送一个用户名,并且该用户名包含一个符号和(&),你不想给我打电话htmlentities在将其存储在数据库中之前,因为数据库中的用户名将包含&.

扬帆大鱼

问题是,对于一种用途来说,干净或安全的东西不会是另一种用途:清除路径的一部分、MySQL查询的一部分、HTML输出(如html、javascript或输入值),因为XML可能需要不同的内容,这是矛盾的。但是,一些全球性的事情是可以做的。试着使用滤波器输入获取用户的输入。和使用准备好的陈述用于SQL查询。虽然,您可以创建一些类来管理您的输入,而不是一个“全功能”函数.就像这样:class inputManager{   static function toHTML($field){     $data = filter_input(INPUT_GET, $field, FILTER_SANITIZE_SPECIAL_CHARS);     return $data;   }   static function toSQL($field, $dbType = 'mysql'){     $data = filter_input(INPUT_GET, $field);     if($dbType == 'mysql'){       return mysql_real_escape_string($data);     }   }}在这种情况下,如果在代码中看到任何$_post、$GET、$_Request或$_cookie,就必须更改它。如果有一天你必须改变过滤输入的方式,只需改变你创建的类。
打开App,查看更多内容
随时随地看视频慕课网APP