不安全的fmath编辑器 -- wysiwyg 领域 和 security 领域 drupal 相关 的问题

Insecure fmath editor


1
vote

问题

中文

fmath是一个极其强大的插件库,用于wysiwyg编辑器。

它为数学公式提供了一个编辑器,它生成可用于Drupal站点的图像。它处理mathml和乳胶。

虽然存在问题,但是使用以下PHP文件在服务器上保存图像。

  if($_POST["save"]){    $type = $_POST["type"];    if($_POST["name"] and ($type=="JPG" or $type=="PNG")){       $img = base64_decode($_POST["image"]);       $myFile = "img/".$_POST["name"].".".$type ;       $fh = fopen($myFile, 'w');       fwrite($fh, $img);       fclose($fh);       echo "http://your_server/capture/img/".$_POST["name"].".".$type;    } }else{    header('Content-Type: image/jpeg');    echo base64_decode($_POST["image"]); }   

此文件是公开可用的,并且不能仅限于.htaccess到localhost(整个库不起作用)。

从我的理解通过URL通过用户侧的脚本调用文件,并且图像通过POST方法传递。这使得文件非常危险,因为它允许任何人保存在服务器上的任何内容。

是我的怀疑是否正确? 如何使这种安全使用?

整个库重量11MB,所以我不想调试它。

英文原文

fmath is an extremely powerful plug-in library for wysiwyg editors.

It provides an editor for mathematical formulas, which generates images that can be used in drupal sites. It processes mathml and latex.

There is a problem though, images are saved on a server using the following php file.

if($_POST["save"]){    $type = $_POST["type"];    if($_POST["name"] and ($type=="JPG" or $type=="PNG")){       $img = base64_decode($_POST["image"]);       $myFile = "img/".$_POST["name"].".".$type ;       $fh = fopen($myFile, 'w');       fwrite($fh, $img);       fclose($fh);       echo "http://your_server/capture/img/".$_POST["name"].".".$type;    } }else{    header('Content-Type: image/jpeg');    echo base64_decode($_POST["image"]); } 

This file is publicly available, and can not be restricted with .htaccess to localhost only (the whole library will not work).

From my understanding the file is called by scripts on a user side via an url, and the image is passed by the POST method. That makes the file very dangerous as it allows anyone to save anything on the server.

Are my suspicions correct? How can I make this safe to use?

The whole library weights 11MB so I don't feel like debugging it.

     
     
     

回答列表

2
 
vote

这应该真的被解决到FMATH项目维护者。我邮寄了他们在代码中指出一些安全问题。如果他们没有回复,我会编辑这篇文章在这里回答这个问题,但希望他们会用新版本回复;)

原始注释 - 邮寄到fmath维护者:

一些关键的事情遗漏了你想要正确的:

  • csrf保护 - 如果您不使用表单API(已包含此文件),那么您可以手动使用drupal_get_token和drupal_valid_token是帮助程序。
  • 恶意文件类型 - file_munge_filename是这里的帮助者
  • 太多/太大文件
  • 临时将文件上传到Webroot之外的临时目录,并给它一个随机名称,以便在将其移动到最终位置之前,可以在该临时位置进行验证
  • 理想情况下,您将验证文件内容(例如病毒扫描,确认文件是任何扩展/ mime类型所说的有效文件)。
  • 控制可以放置文件的位置。

此脚本看起来只允许上传JPG或PNG文件,但它错过了其他一些安全功能

可能有一些其他令人担忧的事情,但我认为列表是一个很好的开始。

我也想知道这件作品,是否可以将base64潜入一个"jpg" 文件,然后是Internet Explorer和Safari的某些象征将执行MIME类型检测并执行HTML(即跨站点脚本攻击):< / p>

     echo base64_decode($_POST["image"]);   

 

This should really be addressed to the fmath project maintainers. I've mailed them to point out some security concerns in the code. If they don't respond I'll edit this post to answer the question here, but hopefully they will respond with a new version ;)

Original comment - mailed to fmath maintainer:

Some key things this is missing that you would want to get right:

  • CSRF protection - If you don't use the form API (which includes this already) then you can manually use drupal_get_token and drupal_valid_token are helpers.
  • Malicious file types - file_munge_filename is a helper here
  • Too many/too big of files
  • Temporarily uploading the file to a temporary directory outside of the webroot and giving it a random name so that it can be validated in that temporary location before moving it to the final location
  • Ideally you would validate the file contents (e.g. virus scan, confirm the file is a valid file of whatever the extension/mime type says it is).
  • Control where the file can be placed.

This script looks like it would only allow jpg or png files to be uploaded, but it misses out on a few other security features

There are probably a few other things to worry about, but I think that list is a good start.

I also wonder about this piece and whether you could sneak base64 encoded html into a "jpg" file and then some veresions of internet explorer and safari will do mime type detection and execute the html (i.e. cross site scripting attack):

   echo base64_decode($_POST["image"]); 
 
 
0
 
vote

我已经通过将文件插入Drupal并检查了用户来解决这个问题,如果他不是匿名(如果我在这里做错了),请纠正我。

  define('DRUPAL_ROOT', '/home/username/www/'); require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION); global $user; if($user->uid != 0){    // the provided imageCapture.php script    if($_POST["save"]){    ...    }    // end the provided script }   

随着我的门户网站的用户,它将信任它为我做了诀窍。 我同意Greggles,虽然它是FMATH维护者应该解决的事情。

 

I have solved this problem by plugging the file to drupal and checking the user if he is not anonymous (please correct me if I'm doing something wrong here).

define('DRUPAL_ROOT', '/home/username/www/'); require_once DRUPAL_ROOT . '/includes/bootstrap.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_SESSION); global $user; if($user->uid != 0){    // the provided imageCapture.php script    if($_POST["save"]){    ...    }    // end the provided script } 

As users of my portal will be trusted it does the trick for me. I agree with greggles though that it is something that fmath maintainers should fix.

 
 
 
 

相关问题

0  Ckeditor黄色按钮  ( Ckeditor yellow buttons ) 
我已安装Drupal 7的CKEditor模块。 每当任何Drupal形式加载时,它都会延伸黄色CKEDITOR按钮。 我检查了配置页面隐藏CKEditor的黄色背景,但没有任何设置。 所以我如何隐藏这个黄色背景颜色。这个CKEDITOR主题还是只需配置? 有没有人经历过这个问题? ...

1  将现有textarea更改为full_html  ( Change an existing textarea to full html ) 
我有宠物模块已启用。根据我的要求,我必须将邮件正文从正常Textarea更改为Full_html。当我更改#type和#format时,它将更改为CKEditor。以下是我的代码: case 'pet_form': $form['mail_body']['#type'] = 'text_format'; ...

0  没有改变的图像丢失的图像的原因是什么?  ( What are the reasons for images going missing without changes made ) 
我有一个客户抱怨那些不再存在的图像。我不知道该怎么想,所以我让他再次添加它们,让我知道它是否再次发生,同时我注意到文件路径(/站点/默认/文件/样式/大/公共/ map.jpg)。 我现在已经收到了另一封电子邮件,说他们已经消失了,并且在检查默认的耳机后,可以在wysiwyg中找到,但是没有关于节点的实际页面显示中的...

0  Drupal 7中的FckEditor  ( Fckeditor in drupal 7 ) 
我在我的Drupal网站和我在库目录中解开了fckeditor文件夹中安装了wysiwyg模块。 在"wysiwyg配置文件" 页面上,为过滤的HTML格式设置FckEditor,然后选中我想要在编辑器上显示的所有按钮。 在已启用的过滤的HTML配置页面中: 1限制允许的HTML标记,我允许我使用的所有标签。 2-...

1  wysiwyg和ckeditor模块现在不兼容吗?  ( Are wysiwyg and ckeditor modules incompatible now ) 
如果在其他地方提出这个问题,则道歉,但我找不到与它直接相关的任何东西。 我正在设置我的第一个Drupal网站的过程中。我希望能够在帖子正文中包含图像,但没有打开"完整HTML" 。 第4章使用Drupal (第2版)描述了一种方法,涉及使用WYSIWYG和CKEDITOR模块。 但是,当我安装两个模块的最新版本时(W...

0  如何在所有长文本字段上启用丰富的文本编辑?  ( How do i enable rich text editing on all my long text fields ) 
我有一个带有3个长文本字段的节点,我想在它们上提供丰富的文本编辑。到目前为止,我对Wysiwyg的所有实验只会导致一个有编辑器的长文本字段之一。所以编辑/配置将给我富有的文本编辑器所有? ...

4  如何在admin / config / people /帐户的电子邮件模板中启用ckeditor?  ( How to enable ckeditor in the emails templates at admin config people accounts ) 
就是这样。 我需要启用CKEditor,为 admin/config/people/accounts admin/config/people/accounts 表示欢迎电子邮件的文本主体 如何这样做? ...

2  破损媒体的解决方案1.x模块图像嵌入+ CKEDITOR。最终提交按钮不起作用  ( Solution to broken media 1 x module image embed ckeditor the final submit but ) 
最新稳定的Drupal 7,Media 1.x和CKEditor模块(带最新的CKEDITOR库)。 当您上传图像时,并将其嵌入到正文区域内时,最终提交已在您上传图像后,或从库中选择图像,按钮不起作用。 它只是生成一个令人讨厌的javascript错误。 请参阅此处拍摄屏幕: http://alphex.com/z/...

0  Wysiwyg粘贴来自单词  ( Wysiwyg paste from word ) 
我用ckeditor库安装了wysiwyg模块。 我已经配置了文本格式和CKEDITOR配置文件,但我面临的唯一问题是"从Word中粘贴" 。 当我用彩色文本复制某些内容时,一些列表和表,在我点击"从单词中粘贴" 按钮后,将内容粘贴在textarea中并点击确定,颜色和字体大小和其他形成的尺寸。< / p> 任何解...

1  从路径中删除目录名称  ( Remove directory name from path ) 
我使用wysiwyg编辑器具有IMCE的文章描述,问题是一旦我用IMCE上传图像文件,它就会显示图像路径,如 /directoryname/sites/default/files/image.jpg 一旦我们从本地到在线服务器托管网站,图像没有显示,因为现在directoryname更改为其他名称。 任何建...

0  在WysiWyg中使用CSS进行自定义页面  ( Using css in wysiwyg for custom page ) 
我希望允许我的最终用户能够保存自定义CSS(SASS将更好)以及它们在WYSIWYG中编辑的页面内容。我知道他们可以在内联举行风格,但有时能够使用CSS选择器是有用的。是否有一个将允许此模块? ...

0  如何在WYSIWYG编辑器中添加选项,以便可以选择块作为图像?  ( How to add a option in wysiwyg editor so that blocks can be selected as images ) 
使用wysiwyg模块,我们能够添加图像。有没有办法,这样我就可以在页面内的任何地方查看我的块,并在任何地方分配这些块? ...

9  使用wysiwyg模块自定义ckeditor.styles.js文件  ( Custom ckeditor styles js file with wysiwyg module ) 
我正在尝试通过wysiwyg模块自定义CKEditor中的"字体样式" 下拉列表,但我看不到WYSIWYG模块的配置文件编辑器中的CKEDitor.Styles.js的路径。 请参阅此帖子以获取进一步的信息 - 它表示应该有一种方法来指定该文件的位置。 ...

0  哪个wysiwyg模块将进入Drupal 8的核心?  ( Which of the wysiwyg modules will get in to the core of drupal 8 ) 
我听说,Drupal 8的核心将有一个wysiwyg编辑器。还有什么决定,其中一个人会做出什么决定吗? 我听说过: ckeditor Aloha Editor wysiwyg 我有一个决定制作我将添加到我的网站的模块,我需要一个更深入地将wysiwyg集成到Drupal核心。例如,所有外部...

0  自定义CKEDITOR按钮还是错误的方式?  ( Custom ckeditor buttons or wrong way ) 
我需要设置一个textarea字段,它将提供游戏作弊。所以我有Xbox,PlayStation等每个按钮的小GIF。因此,当有人想要发布xbox作弊时,他需要将此小gif插入文本区域字段。我怎么能走这个? 我认为可以为CKEditor中的每个GIF设置自定义按钮,但我找不到如何做到这一点。或者,还有更好的方法? 谢谢...

16  CKEditor删除类名,即使配置中的异常  ( Ckeditor removes class names even with the exception in config ) 
ckeditor似乎在HTML视图和丰富的文本视图之间切换时剥离类名。 根据Web的许多建议,我已将以下内容添加到Config.js文件: config.allowedContent = true; 上传,清除缓存甚至直接去了js文件以检查我的机器上是否缓存,但它仍然删除了类。 是另一个解决方案吗? ...

1  CKEDITOR DETACH / ATCHENT活动  ( Ckeditor detach attach event ) 
如何在禁用和启用CKEDITOR时执行/插入jQuery脚本 Source 按钮。 我想在分离CKEditor时用自定义标签替换图像标记,然后在附加CKEDITOTER后退时返回原始图像标记。 前: <img alt="INLINE:143219;w=240;h=240" class="wysiwyg-inlin...

0  wysiwyg编辑器未显示按钮和插件  ( Wysiwyg editor not displaying buttons and plugins ) 
我是德鲁佩尔的新手,还没有找到答案。我已更新到Drupal 6.28,还没有准备好更新到D7,而Wysiwyg和Tinymce则不显示。此外,我不能单击/解开按钮和插件的复选框,因为我没有看到复选框!我也不能 使用 TinyMCE 5.3.8 。其他用户界面模块我的网站已 Superfish, jQuery plug...

0  如何在Drupal 7中使用WYSIWYG编辑器具有结构化内容?  ( How to use wysiwyg editor with structured content in drupal 7 ) 
我正在徘徊是将WYSIWYG编辑器和结构化内容结合的最佳策略。我希望用户能够使用WYSIWYG编辑器添加以下内容: 图像 与其他节点的链接 链接到例如,youtube 我也希望能够将这些添加的图像,链接等添加为结构化内容(例如,将它们放在视图中。) 是否有解决方案?我认为最好的方法是使用实​​体参考模块。 ...

6  在Drupal 7使用最新的CKEDITOR,媒体上传按钮无法正常工作  ( In drupal 7 with latest ckeditor media upload button not working ) 
如果我要安装 wysiwyg + ckeditor 3.6.6.1(2013.02.20) + Drupal 7中的Media 模块,然后在CKEditor上上载功能工作。这是我的屏幕截图: 但是,如果我安装 ckeditor drupal 7模块 + 媒体模块然后上传功能不在CKEDITOR上工作。这是我的...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.