Data App Flowchart not showing Logo

Hi there,

This is a purely visual issue regarding the verified component Data App Flowchart (Data App Flowchart – KNIME Community Hub).

I am using this component on the Data App I’m working on, and I would like to add my company logo to it.

However, if it works fine when opening the component view locally, it doesn’t work anymore when deployed on our Business Hub. It is the same behaviour with the default KNIME logo, and my company logo.

When I open the component view locally, it works fine, like this:

Or this with the default value:

When opening the Data App from the Hub, the image is not found (regardless of which it is):

Our Hub doesn’t use TLS and I was wondering if this could have something to do with it, but as the image is base64 encoded and not pulled online, this shouldn’t be important.

I have also tried another header component (Workflow Application Header – KNIME Community Hub) which works fine showing the logo, using the same base64 encoding.

Does anyone have any idea on how to fix this in the component?

Thanks :slight_smile:

Hi @Vonwen,

have you checked the browser console for errors? If not, how did you referenced the logo? You mentioned your Hub does not use TLS … browsers require all connections to be secure these days.

Also, not using TLS exposes your entire traffic to those who can intercept it … even if it’s run only locally, it is highly discouraged to not use TLS.

In case encryption is, for whatever reason impossible to obtain, consider putting a Proxy in front of it as a half-bridge.

Best
Mike

1 Like

Hey, thanks for your reply.

The inspector tells that the URL is invalid:

I’m not sure why though, I thought it could be a Chrome issue but I can’t load that url in Safari either, and the image isn’t loaded when running the Data App there as well. I have tried escaping the / as seen on Stack Overflow but it doesn’t seem to help.

The only cause I can think of is that the URL is indeed wrong, but I can’t fathom why it would work in KNIME with the JS view, and not in a browser.

Regarding the TLS, I’m certain now that it’s not the cause. As a side note, the reason why it’s not enabled is that there was an issue between our AWS certificates and the hub preventing it to work if enabled. That’s something we’ll work to fix at some point, but in the meantime, that was the official advice of KNIME Support to get it running.

Is there some encoding to do with the URL so that it works?

For now it looks like this:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAAB4CAYAAABmdbmbAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAADOLSURBVHgB7X1bcJ3Xdd5a+wCkpDgW9FDbykgmYI1cy7FN0Gk7k0f
...
f3eyofVxr/7HwLkD0KR5Tk0DXQh/6z+9tJVMaen/A7zWX4z0yXLxAAAAAElFTkSuQmCC

I have seen something about padding with “==” at the end, especially as the default URL (the KNIME logo) has it, but adding them breaks it even in KAP.

Hey @Vonwen,

you are most welcome. The data URL “data:image/png” is or rather should be fine. Try using this tool to paste the entire base64 encoded string and see if it converts to a real image:

About the cert incompatibility between AWS and the Knime Hub it might, but this is really just speculation based on my experience with AWS CloudFront, be caused by the max bit length which took me some time back then to find out. The Cloudfront doc you can find here:

But again, you might not be required to go full bridge as you can, very easily, use a CDN as a TLS termination. In case you have any interest into that, feel free to contact me at info@atmedia-marketing.com

The setup, aa a simple pass through without caching, usually requires a few hours at most and the costs are neglectable.

Best
Mike

2 Likes

Hey @mwiegand ,

Thanks for your reply. I will keep that in mind if we have trouble enabling TLS (when we try to do it).

Regarding the image issue, I think I have found where it comes from, but I am unsure how to fix that.

When encoding the image (into the one you provided or one I used previously, they give the same results), and pasting that code to the html directly from the inspector, the image shows up normally. So the issue is somewhere between the string I provided, and the Data App construction.

As an example, I tried to find the differences between the URL from the Data App, and the one I got from the encoder (which should in theory be the same):

The red is the Data App and the green is the one from the encoder. The string is the same at the exception of some characters that seem to be url encoded, here I highligted a subset of the string, that ends with ++. On the green side, it does show ++, whereas on the red side, they are encoded as ++

I also rechecked my encoded image in the component, with a Table Difference Finder, and up until the last variable before the Generic JavaScript View, the variable contains the right data:

5:1511:0:1568:0:1297:1170	StringType	Image	data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKgAAAB4CAYAAABmdbmbAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAADOLSURBVHgB7X1bcJ3Xdd5a+wCkpDgW9FDbykgmYI1cy7FN0Gk7k05nCDpO7DhpRGa...

As we can see here, there is a + that is still written as is and is not url encoded.

I also checked the JS code to see if there was a transformation there. I’m no JS expert, as my main language is Python, but I don’t see anything happening here, it’s just attributing the class and adding src:
image

So at this point I am leaning towards a KNIME bug that overencodes an already encoded string, and breaks it.

I don’t see any other solution to make it work, other than manually updating the html on the web page. Looking at the commented part, it looks like it could work by uploading the image and pointing to it, I’m not sure what the path should be for this though (./img/logo.png doesn’t work but that would be too easy I guess).

Nice spot. Can you share the base64 string for both files (Knime and webportal) here please? I want to check a few things myself.

I mentioned previously that another component works, and what I can see here is that instead of the Generic Javascript View, it is using a Text Output Widget (legacy), which outputs a simple html code, and the layout is made in the Layout editor (instead of with JS and html):

Which is why I’m leaning quite a bit towards a bug on the Generic JS View node, or the Data App engine.

Same for me. What caught my attention was the &#43&a in the faulty base64 string but the screenshot does not show the entire string.

Sure thing, I’m warning you they are both quite large ^^

Web:

data:image/png;base64,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

Encoded properly:

data:image/png;base64,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

As I thought, malformed base64. Clearly a bug at this stage of the investigation.

The string sequence + is present all over the place

If I search & replace the string sequence by a plus, it works like a charm. So you might, as aa fallback, use a string replace / manipulation to substitute the faulty string with the plus sign.

@ScottF sorry to bother you but there is clearly a bug so you might move this ticket to another category or create a ticket.

Cheers
Mike

Yep.

Well I can’t do anything about this on my side as the string I am sending in my workflow is correct ^^

Unless there is a correct way to encode that character that will prevent the overencoding, in which case I could indeed manipulate that string before feeding it to the component configuration.

Thanks for the support regardless :slight_smile:

You are most welcome. Good night!

2 Likes

Hey @Vonwen, @mwiegand,

Thanks for looking into this issue. The difference between the two is likely the sanitisation that is turned on on the hub. Which hub version are you using @Vonwen? We recently introduced sanitisation by default on our Hubs and Servers. This sanitisation is turned off by default in the AP.
While we did some special handling to some nodes to make sure that they only sanitise the important parts, there is still some encoding going on to prevent malicious key sequences. This most often kills base64 encoded data as it is very likely that this encoding will happen and therefore the content is broken. There is not much that we can do to still confirm to security standards and make sure that we don’t break these strings. You could exclude the sanitisation for specific nodes, but than you have to live with the less secure execution of these nodes.
We are currently reworking a lot of these components to make use of newer nodes (Image View in this case) to make images possible but still be secure.

Let me know if this helps.

Greetings,
Daniel

3 Likes

Hey Daniel, thanks for the reply :slight_smile:

We are currently using the Hub version 1.8.3.

If you are working on refactoring those verified components, then I guess there is not much point for me to try and make it work in a less secure way, as this is really a minor inconvenience at best (for my use case at least).

If you can let me know here when a new version is available, that would be great ^^

Thanks again

Guillaume

Hi @DanielBog,

reading through the changelog and thinking about your prev. comment:

https://docs.knime.com/latest/analytics_platform_installation_guide/index.html#release-notes-changelog-523

I’d like to add some real life experience based on actual events that took place (not related to Knime but very much applicable). Injecting malicious code directly is most of the time too obvious and can be mitigated via easy to implement browser security measures such as:

  • Content Security Policy (CSP)
  • XSS-Protection
  • Cross Origin Resource Sharing (CORS)
  • X-Content-Type-Options or X-Frame-Options
  • Feature (old name) respectively Permission Policy
  • Sub Resource Integrity (SRI)
  • Referrer Policy
  • Same Site Cookies

In case of malicious code getting injected, it usually happens as part of an image which the browser cannot scan like an anti virus. Like from that incident I did the forensic research about and recovered the systems:

That code, once the image got uploaded, gets parsed by the server i.e. via Thumbnail generation, downloads the shell script and could turn the Hub-Server into a rogue one.

I have no full understanding of the Hub but sanitization in the JavaScript nodes would only be aa starting point. Though, the first line of defense are the browser mechanism listed above. On a Hub-Server, I’d recommend running ClamAV as, in the displayed example, it was the only one which virustotal.com listed being able to identify the malware. Worth to mention any asset uploaded to a server should never have execution permissions getting assigned.

https://www.clamav.net/

Best
Mike

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.