为了账号安全,请及时绑定邮箱和手机立即绑定

最终的清洁/安全功能

最终的清洁/安全功能

神不在的星期二 2019-06-19 11:16:10
最终的清洁/安全功能我有很多来自$_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;}
查看完整描述

3 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

关于一般卫生功能的想法是一个破碎的概念。

的确有正确的卫生方法适用于各种用途。在字符串上不加区分地运行它们通常会破坏字符串-为SQL查询转义一段HTML代码会破坏它,以便在网页中使用,反之亦然。卫生设施应适用就在那之前利用这些数据:

  • 在运行数据库查询之前。正确的卫生方法取决于您使用的库;如何防止PHP中的SQL注入?

  • htmlspecialchars()为了获得安全的HTML输出

  • preg_quote()用于正则表达式

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

使用“一刀切”的卫生功能就像在植物上使用五种毒性很高的杀虫剂,根据定义,这种杀虫剂只能包含一种虫子-结果却发现你的植物受到第六种杀虫剂的侵扰,而这些杀虫剂都不起作用。

始终使用正确的方法,最好是在将数据传递给函数之前直接使用。绝不可能混合方法,除非你需要。


查看完整回答
反对 回复 2019-06-19
?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

简单地通过所有这些函数传递输入是没有意义的。所有这些功能都有不同的含义。数据不能通过调用更多的转义函数而变得“更干净”。

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

编辑

还请注意使用其他函数时出现的问题。例如,如果客户端向服务器发送一个用户名,并且该用户名包含一个符号和(&),你不想给我打电话htmlentities在将其存储在数据库中之前,因为数据库中的用户名将包含&.


查看完整回答
反对 回复 2019-06-19
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

问题是,对于一种用途来说,干净或安全的东西不会是另一种用途:清除路径的一部分、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,就必须更改它。如果有一天你必须改变过滤输入的方式,只需改变你创建的类。


查看完整回答
反对 回复 2019-06-19
  • 3 回答
  • 0 关注
  • 508 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信