在 Java Web 项目中显示 BLOB 对象,避免持久的跨站点脚本?

Posted

技术标签:

【中文标题】在 Java Web 项目中显示 BLOB 对象,避免持久的跨站点脚本?【英文标题】:Display BLOB object in Java web project avoiding persistent cross site scripting? 【发布时间】:2015-12-18 04:19:05 【问题描述】:

如何在 Java Web 项目中显示存储为 BLOB 对象的数据并避免持久的跨站点脚本漏洞?

ViewDeliveredReportsPage.java 中的方法respond() 将未经验证的数据发送到line 2775 上的网络浏览器,这可能导致浏览器执行恶意代码。

2773 byte[] barray = new byte[byteLen];
2774 barray = blob.getBytes(1,byteLen);
2775 httpResponse.getOutputStream().write(barray);
2776  catch (SQLException e) 
2777 logger.error("ERROR onSelectionChanged

【问题讨论】:

【参考方案1】:

在传递要显示的数据之前,需要对其进行转义。 OWASP ESAPI 库似乎是一个不错的选择。你可以在这里找到它:https://code.google.com/p/owasp-esapi-java/downloads/list

byte[] barray = new byte[byteLen];
barray = blob.getBytes(1,byteLen);
//You'll probably have to convert this to a string first - I am not too
//familiar with Java, but the principal is the same.
String output = ESAPI.encoder().encodeForhtml(barray);
httpResponse.getOutputStream().write(output);
 catch (SQLException e) 
logger.error("ERROR onSelectionChanged

这份备忘单值得一读:https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

【讨论】:

以上是关于在 Java Web 项目中显示 BLOB 对象,避免持久的跨站点脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular Web 中显示 blob 内容(doc、ppt、xls)

如何使用 JS 将 blob 对象显示为图像

在 java swing 中显示在一行中的 Blob 数据

Blob和Java对象的转换

什么java类型可以写入BLOB类型中

在 MySQL 中将 Java 对象存储为 BLOB:奇怪的错误