Dart WebUI中的base64 img src导致错误
以下是模板中有问题的部分:Dart WebUI中的base64 img src导致错误,dart,dart-webui,Dart,Dart Webui,以下是模板中有问题的部分: {{file.filename} 来源:{{file.src} convertedfiles是AndroidFile的列表: 类AndroidFile{ 文件\u文件; 字符串文件名; 字符串src; 布尔·伊斯梅; AndroidFile(此._文件):isImage=false{ filename=htmlEscape(_file.name); //如果文件是图像,则读取并显示其缩略图。 if(_file.type.startsWith('image')
- {{file.filename}
来源:{{file.src}
convertedfiles是AndroidFile的列表:
类AndroidFile{
文件\u文件;
字符串文件名;
字符串src;
布尔·伊斯梅;
AndroidFile(此._文件):isImage=false{
filename=htmlEscape(_file.name);
//如果文件是图像,则读取并显示其缩略图。
if(_file.type.startsWith('image')){
FileReader=新的FileReader();
reader.on.load.add((e){
src=reader.result.toString().trim();
//打印正确的URL(数据:image/png;base64,…)
印刷(src);
isImage=true;
watcher.dispatch();
});
reader.readAsDataUrl(_文件);
}
}
}
将显示模板。它显示文件名,显示源代码,但imagetag看起来像
哈希带下划线(在Chromium源代码视图中),如果我单击它,它会显示“未找到文件:/web/out/”
转换为JS在Chrome中表示:
“资源被解释为图像,但使用MIME类型text/html传输”
样本源已打开有什么提示吗?我发现了问题 这是因为URI由于安全原因而被清除。消毒剂会将无效的URI转换为散列
从web\u ui/templating.dart
:
/**
*确保[usiString]是一个安全的URI。否则,返回“#”URL。
*
*此方法中的逻辑基于位于以下位置的GWT实现:
* http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/safehtml/shared/UriUtils.java
*/
字符串sanitizeUri(uri){
如果(uri是SafeUri),则返回uri.toString();
uri=uri.toString();
返回_isSafeUri(uri)?uri:'#';
}
const _SAFE_SCHEMES=const[“http”、“https”、“ftp”、“mailto”];
bool_isSafeUri(字符串uri){
var scheme=新Uri(Uri).scheme;
if(scheme='')返回true;
//mailto有两种检查方法可以正确处理土耳其语言环境。
//i->土耳其语地区的高音->İ
//我->在土耳其地区降低->ı
//有关详细信息,请参阅:http://www.i18nguy.com/unicode/turkish-i18n.html
返回_SAFE_SCHEMES.contains(scheme.toLowerCase())||
“MAILTO”==scheme.toUpperCase();
}
因此,消毒剂将您的数据:
方案URI转换为#
。数据URI可以用于XSS,但据我所知,当数据URI内容类型为image/*
时,允许使用数据URI可以改进检查
也许要提交一份bug报告?我发现了问题
这是因为URI由于安全原因而被清除。消毒剂会将无效的URI转换为散列
从web\u ui/templating.dart
:
/**
*确保[usiString]是一个安全的URI。否则,返回“#”URL。
*
*此方法中的逻辑基于位于以下位置的GWT实现:
* http://code.google.com/p/google-web-toolkit/source/browse/trunk/user/src/com/google/gwt/safehtml/shared/UriUtils.java
*/
字符串sanitizeUri(uri){
如果(uri是SafeUri),则返回uri.toString();
uri=uri.toString();
返回_isSafeUri(uri)?uri:'#';
}
const _SAFE_SCHEMES=const[“http”、“https”、“ftp”、“mailto”];
bool_isSafeUri(字符串uri){
var scheme=新Uri(Uri).scheme;
if(scheme='')返回true;
//mailto有两种检查方法可以正确处理土耳其语言环境。
//i->土耳其语地区的高音->İ
//我->在土耳其地区降低->ı
//有关详细信息,请参阅:http://www.i18nguy.com/unicode/turkish-i18n.html
返回_SAFE_SCHEMES.contains(scheme.toLowerCase())||
“MAILTO”==scheme.toUpperCase();
}
因此,消毒剂将您的数据:
方案URI转换为#
。数据URI可以用于XSS,但据我所知,当数据URI内容类型为image/*
时,允许使用数据URI可以改进检查
可能会提交错误报告?请注意,如果您知道您正在处理一个不易受XSS攻击的安全URI,您可以使用安全URI包装(从
web\u ui/web\u ui.dart
导入)来解决此问题。例如,将模板更改为:
致:
或者在内部更改file.src以存储安全URI 请注意,如果您知道您正在处理一个不易受XSS攻击的安全URI,您可以通过使用安全URI包装(从
web\u ui/web\u ui.dart
导入)来解决此问题。例如,将模板更改为:
致:
或者在内部更改file.src以存储安全URI 如果有人想跟随,问题就在这里…如果有人想跟随,问题就在这里…谢谢Siggi!非常好的支持。在我的情况下(SDK 0.2.9.9_r16323和WebUI 0.2.9),我必须使用:import'package:web_ui/safe_html.dart';safeuri=新的safeuri.unsafe(src);来存储SafeUri。只有此命名构造函数。但是有了这个,它就完美了。它现在是新的SafeUri.unsafe()。我会更新答案的。谢谢Siggi!非常好的支持。在我的情况下(SDK 0.2.9.9_r16323和WebUI 0.2.9),我必须使用:import'package:web_ui/safe_html.dart';safeuri=新的safeuri.unsafe(src);来存储SafeUri。只有此命名构造函数。但是有了这个,它就完美了。它现在是新的SafeUri.unsafe()。我会更新答案。