帮助理解magic_quotes_gpc()

Moo*_*oon 8 php security function manual

我正在从教程中学习这个PHP代码来上传文件

<form method="post" enctype="multipart/form-data">
  <input name="userfile" type="file" id="userfile">  
</form>

<?php
  if (isset($_POST['upload']) && $_FILES['userfile']['size'] > 0) {
    $fileName = $_FILES['userfile']['name'];
    $tmpName  = $_FILES['userfile']['tmp_name'];
    $fileSize = $_FILES['userfile']['size'];
    $fileType = $_FILES['userfile']['type'];

    $fp      = fopen($tmpName, 'r');
    $content = fread($fp, filesize($tmpName));
    $content = addslashes($content);
    fclose($fp);

   if (!get_magic_quotes_gpc()) {
     $fileName = addslashes($fileName);
   }

   include 'library/config.php';
   include 'library/opendb.php';

   $query = "INSERT INTO upload (name, size, type, content ) ".
     "VALUES ('$fileName', '$fileSize', '$fileType', '$content')";

   mysql_query($query) or die('Error, query failed');
   include 'library/closedb.php';
Run Code Online (Sandbox Code Playgroud)

现在我通过使用PHP文档了解每个功能和一切

除了

get_magic_quotes_gpc()
Run Code Online (Sandbox Code Playgroud)
  • 它是什么?它能做什么?
  • 这是否具有潜力?如果是,是否有替代品?
  • PHP手册说"从PHP 5.3.0开始,此功能已被弃用.非常不鼓励依赖此功能." 请详细说明?
  • 是不是有办法将文件上传到(web)服务器harDisk并提供链接到它们..

Dmi*_*ryK 19

get_magic_quotes_gpc()是一个检查配置(php.ini)的函数,如果magic_quotes_gpc关闭则返回0(否则返回1).

当magic_quotes打开时,所有'(单引号),"(双引号),\(反斜杠)和NUL都会自动使用反斜杠进行转义.这是为了防止各种注入安全问题.

在您的情况下,代码检查设置是否已关闭并添加斜杠以正确转义内容以防止SQL注入.

就像你说的那样 - 这个功能已被弃用,将来肯定会被删除(事实上他们已经在PHP6中删除了它).

另一种方法是根据需要在运行时转义数据

  • 太棒了......不能给出更好的解释......伙计,你能重写PHP手册让世界理解 (2认同)
  • 我要做的唯一补充是说它试图防止注入安全问题。它做得不是很好(因此是像`mysql_real_escape_string`这样的函数的原因)。其次,永远不要使用它(`magic_quotes_gpc`)。如果该函数返回 true(已启用),则对所有输入运行 `stripslashes`。然后通过准备好的查询绑定你的参数,或者使用`mysql_real_escape_string/mysqli::real_escape_string`。**不要依赖`magic_quotes_gpc`**......它被弃用是有原因的......(并且你在问题中发布的代码因此容易受到攻击)...... (2认同)