I also use eval in my GWT application. What is an eval alternative in GWT?

On Tuesday, June 4, 2024 at 10:12:12 PM UTC+8 Colin Alworth wrote:

> Consider compiling your application with style=PRETTY or DETAILED so you 
> can see more detail on the name of methods and the classes that surround 
> the code you have questions about, it can make it easier to hunt these down.
>
> I pretty-printed the code snippet you shared, which results in this:
>                 {
>                     j = k.substring(Z, m);
>                     l = k.substring(m + $)
>                 } else {
>                     j = k;
>                     l = fb
>                 }
>                 c[j] = l
>             }
>         }
>         else if (j == xb) {
>             k = i.getAttribute(vb);
>             if (k) {
>                 try {
>                     d = eval(k)
>                 } catch (a) {
>                     alert(yb + k + zb)
>                 }
>             }
>         } else if (j == Ab) {
>             k = i.getAttribute(vb);
>             if (k) {
>                 try {
>                     e = eval(k)
>                 } catch (a) {
>                     alert(yb + k + Bb)
>                 }
>             }
>         }
>     }
> }
> __gwt_getMetaProperty = function(a) {
>     var b = c[a];
>     return b == null ? null : b
> };
>
> The catch blocks have an alert in them, not something we typically see in 
> GWT. It turns out this is part of the default linker, what looks like an 
> old workaround to support extra meta tags contributing error handling code.
>
> https://github.com/gwtproject/gwt/blob/6cf9146a8c53743c99e48b1d1db42a2e2010e1d7/dev/core/src/com/google/gwt/core/ext/linker/impl/processMetas.js
>           if (eq >= 0) {
>             name = content.substring(0, eq);
>             value = content.substring(eq + 1);
>           } else {
>             name = content;
>             value = '';
>           }
>           metaProps[name] = value;
>         }
>       } else if (name == 'gwt:onPropertyErrorFn') {
>         content = meta.getAttribute('content');
>         if (content) {
>           try {
>             propertyErrorFunc = eval(content);
>           } catch (e) {
>             alert('Bad handler \"' + content +
>               '\" for \"gwt:onPropertyErrorFn\"');
>           }
>         }
>       } else if (name == 'gwt:onLoadErrorFn') {
>         content = meta.getAttribute('content');
>         if (content) {
>           try {
>             onLoadErrorFunc = eval(content);
>           } catch (e) {
>             alert('Bad handler \"' + content + '\" for 
> \"gwt:onLoadErrorFn\"');
>           }
>         }
>       }
>     }
>   }
>
>
>   // Set some of the variables in the main script
>   __gwt_getMetaProperty = function(name) {
>     var value = metaProps[name];
>     return (value == null) ? null : value;
>   }
>
> This is used by most of the built-in linkers - there is an alternative 
> file, processMetasNull.js, which could be used to remove these entirely. To 
> use that, extend your current linker (presumably CrossSiteIframeLinker) and 
> override getJsProcessMetas to return 
> "com/google/gwt/core/ext/linker/impl/processMetasNull.js".
>
> I've filed https://github.com/gwtproject/gwt/issues/9967 to explore 
> phasing these out or making them easier to disable.
>
> On Tuesday, June 4, 2024 at 4:54:38 AM UTC-5 [email protected] wrote:
>
>> When we run automated security scan against our GWT project, one of the 
>> main vulnerability is related to the presence of eval() functions in 
>> the xxxx.nocache.js file
>>
>> ...{j=k.substring(Z,m);l=k.substring(m+$)}else{j=k;l=fb}c[j]=l}}else 
>> if(j==xb){k=i.getAttribute(vb);if(k){try{d=*eval(k)*}catch(a){alert(yb+k+zb)}}}else
>>  
>> if(j==Ab){k=i.getAttribute(vb);if(k){try{e=*eval(k)*}catch(a){alert(yb+k+Bb)}}}}}__gwt_getMetaProperty=function(a){var
>>  
>> b=c[a];return b==null?null:b};w=d;ipmweb.__errFn=e}...
>>
>> We added the CSP that blocks eval executions and the application runs 
>> correctly, meaning that those eval() is not called at runtime.
>>
>> Is there a way to get rid of those eval() functions? Is there someone who 
>> knows in which cases those eval() gets executed? 
>>
>

-- 
You received this message because you are subscribed to the Google Groups "GWT 
Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-web-toolkit/dd2b2bce-fa6b-446b-95ec-cd9cf985a67en%40googlegroups.com.

Reply via email to