标签: google-caja

无法让java程序运行!NoClassDefFoundError的?

我是.NET开发人员,但对于我目前的项目,我需要使用Google Caja,这是一个Java项目.嗯,哦!

我在Windows机器上的http://code.google.com/p/google-caja/wiki/RunningCaja上按照指南操作,但无法运行程序.他们建议的命令行不起作用,所以我进入ant-jars目录并尝试运行plugin.jar:

D:\java\caja\svn-changes\pristine\ant-jars>java -cp . -jar pluginc.jar -i test.htm
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException
        at com.google.caja.plugin.PluginCompilerMain.<init>(PluginCompilerMain.java:78)
        at com.google.caja.plugin.PluginCompilerMain.main(PluginCompilerMain.java:368)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
        ... 2 more
Run Code Online (Sandbox Code Playgroud)

那是怎么回事?

我也尝试过file:/// d:/java/caja/svn-changes/pristine/ant-jars/test.htm而不是test.htm.看来源,似乎文件参数是一个Uri ......

我也尝试在pluginc上运行IKVM,然后不用担心java,但是它也提出了ClassDefNotFoundException ......

谢谢!

编辑:感谢大家的帮助到目前为止:)仍然卡住了.请坚持下去,这可能是.net开发人员转向美丽的OSS技术的开始!

d:\java\caja\svn-changes\pristine\ant-jars>java -cp .\*.* com.google.caja.plugin.PluginCompilerMain 
=> NoClassDefFoundError: /\commons-cli/jar

D:\java\caja\svn-changes\pristine\ant-jars>java -cp .\*.*;..\third_party\java\jakarta_commons\*.* com.google.caja.plugin.PluginCompilerMain
=> Could not find the main class: com.google.caja.plugin.PluginCompilerMain
Run Code Online (Sandbox Code Playgroud)

鉴于build.xml文件中的代码,有什么方法可以让它运行吗?

java noclassdeffounderror google-caja

7
推荐指数
2
解决办法
2万
查看次数

谷歌caja如何使用

假设我有一个页面,我想允许第三方将小应用程序/ iframe嵌入到我的页面中.为了在我的页面上使用caja来保护第三方小应用程序/ iframe.我需要添加任何额外的javascript /服务器端代码才能使用caja吗?通过代理或直接iframe获取第三方小应用程序?

javascript portlet opensocial google-caja

5
推荐指数
2
解决办法
2064
查看次数

使用caja来清理Javascript?

我想允许我的应用程序的用户在Javascript中编写扩展其功能的插件,而不允许访问除我提供的插件API对象之外的任何内容.例如,插件可能如下所示:

plugin.hookSomeUserAction(function() {
    plugin.doSomethingWickedAwesome();
    document.title = 'hacked!'; //shouldn't work
});
Run Code Online (Sandbox Code Playgroud)

Caja看起来应该能够完成工作,但文档可能是我见过的任何开源项目中最糟糕的(非常成就!).我需要一些帮助来设置系统.

我已经在命令行上使用了cajoler,并且我已经将一个这样的插件哄骗到某种有希望被清理的Javascript中.困惑的Javascript看起来像是期待提供一个"IMPORTS___"对象,它应该包含插件可以访问的所有东西.到目前为止很有前途!

不幸的是,让那个惹恼Javascript的文件实际加载并运行已经变成了一个真正的混乱.不幸,文档中的源代码段完全错误,因为函数loadCaja实际上并没有出现在google-caja的当前主干中的任何位置.我找到了一些代码,至少做了些什么:

<div id="plugin"></div>
<script>
    caja.configure({
        cajaServer: "/js/caja"
    }, function(frameGroup) {
        frameGroup.makeES5Frame(document.getElementById('plugin'),
            { /* No network access */ },
            function(frame) {
                frame.url('/js/plugins/test.js')
                    .run({});
            }
        );
    });
</script>
Run Code Online (Sandbox Code Playgroud)

不幸的是,它的作用是尝试让cajoler重新调整我已经哄骗过的javascript.我绝对不想让服务器在每个请求上重新调用每个插件; 我只是在上传时将其哄骗并将其存储起来以备使用.

我也找不到任何关于如何或在何处指定IMPORTS___内容的文档(鉴于这是整个安全模型,它似乎是文档中的一个奇怪的疏忽).是传递给.run()的对象吗?

javascript google-caja

5
推荐指数
1
解决办法
783
查看次数

Google Visualization无法使用appscript html服务

我想使用appscript htmlservice和appscript,html服务似乎工作,但可视化不起作用.这是代码供参考.Code.GS:

// Script-as-app template.
function doGet() {
return HtmlService.createHtmlOutputFromFile('html_visualization');
}
Run Code Online (Sandbox Code Playgroud)

html_visualization.html

    <html>
<head>
<script type="text/javascript" src="https://www.google.com/jsapi"></script>    
  <script type="text/javascript">

   google.load('visualization', '1.0', {'packages':['corechart']});
   google.setOnLoadCallback(drawChart);
   function drawChart() {

   var data = new google.visualization.DataTable();     
      data.addColumn('string', 'Topping');     
        data.addColumn('number', 'Slices');
         data.addRows([          
        ['Mushrooms', 3],
         ['Onions', 1],
         ['Olives', 1],
         ['Zucchini', 1],
         ['Pepperoni', 2]
         ]);
         var options = {'title':'How Much Pizza I Ate Last Night','width':400, 'height':300};
          var chart = new google.visualization.PieChart(document.getElementById ('chart_div') );        
           chart.draw(data, options);
     }

       </script> 

  </head>
  <body>
    <div id="chart_div"></div>
    Hello World
  </body>

       </html>
Run Code Online (Sandbox Code Playgroud)

发布Hello world时出现但没有图表的迹象.

google-visualization google-sites google-caja google-apps-script

5
推荐指数
1
解决办法
967
查看次数

谷歌caja - 阻止恶意代码

我的网站上需要安全的HTML.

我读了caja指南,但我不确定我是否理解了这个概念.

https://developers.google.com/caja/docs/gettingstarted/

我认为它是这样的:

  • 用户将恶意内容提交给我的数据库
  • 我想渲染它.Caja识别恶意代码并阻止它.

但是如何通过caja渲染呢?他们没有在他们的页面上解释这一点,他们只展示了如何替换代码.

<script type="text/javascript">
      document.getElementById('dynamicContent').innerHTML = 'Dynamic hello world';
</script>
Run Code Online (Sandbox Code Playgroud)

假设我们的文档看起来像这样

<body>
    <div class="input">
        <h3>User Input </h3>
        <script> alert("I am really bad!"); </script>
    </div>

    <div class="input">
        <h3>User Input </h3>
        <p> I am safe HTML!</p>
    </div>
</body>
Run Code Online (Sandbox Code Playgroud)

我怎么告诉caja阻止脚本标记?

html javascript security google-caja

1
推荐指数
1
解决办法
2292
查看次数

浏览器在Google Apps脚本中弹出

背景:我已经在Google应用程序脚本的HTML服务中准备了一个表单,我使用Code.gs中的DoGet函数调用该表单.

my doget function
function doGet() {
  return HtmlService.createTemplateFromFile('HTMLUI').evaluate();
}
Run Code Online (Sandbox Code Playgroud)

一旦发布,它将呈现一个简单的浏览器表单,其中包含一些标签,输入框,提交,重置和查找按钮.用户将输入信息点击提交,数据将存储在电子表格(背景)中. - 工作正常,直到这里.

现在,当用户点击查找按钮时 - 需要填充弹出窗口类型,在此弹出窗口中,用户可以输入信息(来自下拉列表),所选条目将填入输入框中,可以修改并再次提交.

题:

在浏览器上如何在GAS中使用POP up kind窗口.

我在HTML服务中的查找按钮如下:

<div><input type="button" onclick="createPopup()" value="Find"></div>
Run Code Online (Sandbox Code Playgroud)

最后调用javascript:

<script type="text/javascript">
        function createPopup() {
        google.script.run.popup(document.forms[0]);
    }
</script>
Run Code Online (Sandbox Code Playgroud)

CreatePopup()javascript代码:

function popup(form){
Logger.log("I am first called");
//Mycode should probably go here I think...  
Logger.log("I am last called");
}
Run Code Online (Sandbox Code Playgroud)

查看日志时,它显示"我第一次被呼叫"和"我最后被呼叫".

我的研究:我发现Spreadsheet.toast(类似的东西)适用于电子表格,但我如何在浏览器上获得小窗口..

html javascript google-caja google-apps-script google-spreadsheet-api

1
推荐指数
1
解决办法
6760
查看次数

如何在node.js下使用Google的Caja HTML Sanitizer将代码列入白名单?

我在node.js下使用npm包Caja-HTML-Sanitizer.

我可以使用sanitizer()函数清理html输入,但是如何使用白名单只允许某些标签(例如p br strong)?

谢谢!

javascript xss node.js google-caja

0
推荐指数
1
解决办法
1665
查看次数