【发布时间】:2013-02-12 22:46:07
【问题描述】:
我希望将应用程序的图像存储在 MSSQL 数据库中。 (我知道关于这个或文件系统存储是否更好存在一些争论;不过那是另一个线程。)我正在考虑做一些类似于http://forum.codecall.net/topic/40286-tutorial-storing-images-in-mysql-with-php/ 但在 CodeIgniter 中的事情:
foreach ($_FILES as $upload_name => $info) {
if ($info['name']) {
// Temporary file name stored on the server
$tmpName = $info['tmp_name'];
// Read the file
$fp = fopen($tmpName, 'r');
$data = fread($fp, filesize($tmpName));
fclose($fp);
//model code consolidated here for ease of question-asking
$db = $this->load->database();
$stmt = $db->insert('my_table', array('image' => $data));
}
}
我的问题主要是关于安全的。基本上,对于清理图像二进制数据插入与其他类型的字符串数据,我应该有什么特别的担忧吗?我从上面链接的站点中取出了代码中的 addlashes(),因为我知道 CI 的活动记录会自行进行一些清理,但我不知道拥有它是否更好(或完全做一些其他准备工作)。
【问题讨论】:
-
安全在什么意义上?你害怕发生的事情的一个例子是什么?顺便说一句:
addslashes不应该用于在 SQL 查询中转义参数,这不是它的目的。你是问 SQL 注入还是别的什么? -
如果您的数据是一个 blob,并且您从不操作它,则没有理由对其进行清理。重要的问题是:从存储中读取数据时如何使用这些数据?您是否将其存储在客户端的临时文件中?
-
@WesleyMurch 是的,我只是想知道 SQL 注入;之前没有将图像存储在数据库中,所以不确定是否有额外的问题。
-
@didierc 还没有完全弄清楚那部分,但最终目标是能够在请求时动态检索图像并将其显示给用户。如果您对此有任何指导,我将不胜感激。 :)
-
我的猜测是,您将有某种 id 绑定到图像,并有一个临时磁盘空间来存储图像。每当客户端请求图像时,它会首先尝试找到它在磁盘上,如果不存在则运行 sql。磁盘空间的行为类似于缓存,您必须定义如何管理空间的规则,这可能是最棘手的部分,当然值得单独提出一个 SO 问题。
标签: sql-server database image codeigniter sanitization