首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP: base64_encode对mysql注入有保护作用吗?

PHP: base64_encode对mysql注入有保护作用吗?
EN

Stack Overflow用户
提问于 2013-07-31 18:24:00
回答 2查看 958关注 0票数 0

我正在尝试设置一个PHP页面,该页面将安全地接受文件上传(简历),将其存储为mysql blob,并在稍后提供下载。但是,当我下载PDF以后查看时,它们总是看起来已经损坏,无法正常打开。

由于Jgoettsch (string's effects on binary)的一个问题,我意识到通过mysql_real_escape_string (防止注入)输入文件数据可能会破坏文件内容,因此我想通过base64_encode()传递二进制文件,并在下载前使用base64_decode()。

下面是一些模拟代码,演示我目前正在做的事情(这是不起作用的):

上传:

代码语言:javascript
运行
复制
<? 
// Get file contents
$cv_pointer = fopen($_FILES['cv']['tmp_name'], 'r');
$cv_content = fread($cv_pointer, filesize($_FILES['cv']['tmp_name']));
fclose($cv_pointer);

// Insert SQL
$sql = sprintf("INSERT INTO documents (name, file, size, date_uploaded)
  VALUES ('%s', '%s', '%s', NOW())",
    mysql_real_escape_string($_FILES['cv']['name']),
    mysql_real_escape_string($cv_content),
    mysql_real_escape_string($_FILES['cv']['size']));
$result = mysql_query($sql);
?>

并下载:

代码语言:javascript
运行
复制
<? 
if (isset($_GET['view_cv'])) {
  $cv = mysql_fetch_assoc($rsApplicationCv);

  header("Content-length: ".$cv['size']); 
  header("Content-type: application/pdf"); 
  header("Content-disposition: attachment; filename=".$cv['name']);
  echo $cv['file'];
  exit();
}
?>

以下是我的问题:

  1. 如果您有一个文件上传字段,该字段易受sql注入的影响吗?还是我不必要地担心?显然,如果我只需将二进制文件传递到blob字段而不进行任何翻译,这个文件上传任务就会简单得多。
  2. 如果我通过base64_encode()提供上传的文件内容,这是否等同于消毒?或者我应该对它进行编码,然后再通过mysql_real_escape_string传递编码的字符串?
  3. 所有这些似乎都是为了存储和获取PDF文件而付出的巨大努力。对于这个共同的需求,有没有一个更简单的解决方案,我还没有偶然发现呢?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-31 19:38:27

Q如果您有一个文件上传字段,该字段是否易受sql注入的影响?

A是的(有点。受SQL注入攻击的不是表单上的字段;该漏洞实际上在处理请求中提交的值的代码中。)

Q还是我不必要地担心?

A No.您应该始终意识到可能发生的坏事,并以防止漏洞暴露(和利用)的方式编写代码。

Q如果我通过base64_encode()提供上传的文件内容,这是否等同于消毒?

A它就在那里,只要您的base64_encode保证返回的值只包含A-Za-Z0-9+.=。最佳实践是使用绑定参数。

Q,还是我应该对它进行编码,然后再通过mysql_real_escape_string传递编码的字符串?

--禁止使用带绑定参数的准备语句的,然后最佳实践规定,如果所有值(包括base64_encoded值)都包含在要提交到数据库的SQL中,则这些值都要在mysql_real_escape_string中运行。

票数 1
EN

Stack Overflow用户

发布于 2013-07-31 18:33:06

既然你说的是消毒,我想这是一个公共网站,陌生人会上传文件。存储用户提交的PDF文件是非常糟糕的想法。首先,你怎么能确定你收到的文件甚至是一个PDF?用户可以100%地将恶意文件压缩到数据库中,并让用户不知情地下载病毒。PDF本身(如果我没记错的话)实际上可以在某些Windows操作系统中执行病毒,就像WMV和WMA文件一样。

如果您绝对需要一个PDF,那么最好的选择是使用用户提交的净化数据创建创建您自己的文件。您可能会在网上找到关于如何做到这一点的教程。我个人不建议首先使用PDF,因为您可以使用HTML和CSS来构建简历并完美地打印出来。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17978034

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档