更新或全新安装vtiger 6.2后,联系人照片可能无法显示。它看起来像一个死链接。
答案 0 :(得分:4)
vTiger 6.2将您上传的所有内容(包括用户和产品图片)放入/存储,并通过htaccess-File(/storage/.htaccess)拒绝从网络访问此文件夹:
deny from all
这些文件只能由webserver / php直接访问,从安全的角度来看这是完美的,它应该保持这种方式(删除这个htaccess文件是一件非常糟糕的事情,因为那时外面的每个人都会是能够阅读你的文件,因为他有正确的路径)!!!
在Web应用程序中处理这些文件的正确方法是永远不要直接在HTML中引用文件(<img src="path/to/file">
,因为你不会因为htaccess-File而看到它们),而是始终路由他们的数据通过gateway-PHP-Script检查请求用户是否经过身份验证(<img src="file.php?filename=path/to/file">
)。 PHP脚本可以(如上所述)绕过Apache / htaccess-Security,因为它直接访问文件系统。这可以在文档部分中完成,您可以看到下载文件会导致&#34; http://domain/index.php?module=Documents&action=DownloadFile&record=10&fileid=11&#34;
但是,不幸的是,vTiger在其Web应用程序中仍有位置,它仍然直接在HTML中引用/ storage中的文件,因为用户图片和产品图片不会显示它们。
我发现应用联系人,用户和产品存在此问题。 我分两步对它们进行了修改:
创建文件(vTiger安装在/ opt / vtiger上)
/opt/vtiger/modules/Users/actions/DownloadPicture.php
<?php
class Users_DownloadPicture_Action extends Vtiger_Action_Controller {
public function checkPermission(Vtiger_Request $request) {
$moduleName = $request->getModule();
if(!Users_Privileges_Model::isPermitted($moduleName, 'DetailView', $request->get('record'))) {
throw new AppException(vtranslate('LBL_PERMISSION_DENIED', $moduleName));
}
}
public function process(Vtiger_Request $request) {
$userRecordModel = Vtiger_Record_Model::getInstanceById($request->get('record'), $request->getModule());
$userPictureDetails = $userRecordModel->getImageDetails();
$pictureData = file_get_contents($userPictureDetails[0]['path'] . '_' . $userPictureDetails[0]['orgname']);
header("Content-type: image/jpeg");
header("Pragma: public");
header("Cache-Control: private");
echo $pictureData;
}
}
?>
/opt/vtiger/modules/Products/actions/DownloadPicture.php
同样但是:class Products_Download...
/opt/vtiger/modules/Contacts/actions/DownloadPicture.php
同样但是:class Contacts_Download...
进入文件,找到<img ... >
- 标签并更改其src-Attribute:
/opt/vtiger/layouts/vlayout/modules/Users/ListViewContents.tpl
index.php?module={$MODULE}&action=DownloadPicture&record={$LISTVIEW_ENTRY->get('id')}
/opt/vtiger/layouts/vlayout/modules/Users/PreferenceDetailViewHeader.tpl
index.php?module={$MODULE}&action=DownloadPicture&record={$RECORD->get('id')}
/opt/vtiger/layouts/vlayout/modules/Users/UserViewHeader.tpl
index.php?module={$MODULE}&action=DownloadPicture&record={$RECORD->get('id')}
/opt/vtiger/layouts/vlayout/modules/Vtiger/DetailViewBlockView.tpl
index.php?module={$MODULE}&action=DownloadPicture&record={$RECORD->get('id')}
/opt/vtiger/layouts/vlayout/modules/Vtiger/uitypes/Image.tpl
index.php?module={$MODULE}&action=DownloadPicture&record={$RECORD_ID}
/opt/vtiger/layouts/vlayout/modules/Contacts/DetailViewHeaderTitle.tpl
index.php?module={$MODULE}&action=DownloadPicture&record={$RECORD->get('id')}
现在肯定你可以在任何地方看到你的照片,但是如果没有登录你就无法访问这些文件!
可能存在的问题:我对vTiger中的权限管理了解不多,告诉您现在只有对记录具有访问权限的用户才能访问这些文件。现在每个用户都可以访问它们。如果有人知道如何控制这个。请评论!
希望一切顺利,就像我一样。
SERVUS 卢卡斯
答案 1 :(得分:-1)
要解决此问题,只需通过FTP客户端连接到服务器即可。清空或删除“/ storage”文件夹中的“.htaccess”文件。 就是这样!
答案 2 :(得分:-1)
或.htaccess文件更改为:
deny from all
为:
Options -Indexes
答案 3 :(得分:-1)
我重写了我的.htaccess文件来自&#34;拒绝所有&#34;为...
# If the URI is an image then we allow accesses SetEnvIfNoCase Request_URI "\\.(gif|jpe?g|png|bmp)$" let_me_in Order Deny,Allow Deny from All # Allow accesses only if an images was requested Allow from env=let_me_in
现在我的图像出现了。