太棒了,我正在使用oData来验证用户输入的一些信息。例如,最大的问题是避免跨站点脚本,这很容易由Chrome调试器完成。如何才能避免这种情况?
我代码: onPress: function(oEvent) {
var event = this.getView().getModel("loggin").getProperty("/TypeCon");
var TestMode = this.getView().getModel("loggin").getProperty("/TestMode");
if (event == ""){
event = "SAP";
}
if (event != 'SAP'){
MessageToast.show("Esta conexão ainda não está disponível");
}else{
if(TestMode == 'X'){
this.getRouter().navTo("CockpitGo");
}else{
var oEntry = {};
oEntry.User= this.getView().getModel("loggin").getProperty("/User");
oEntry.Password= this.getView().getModel("loggin").getProperty("/Password");
var sServiceUrl = "http://abapfox.ddns.net:8000/sap/opu/odata/SAP/YLOGGIN_DATA_SRV/";
var oModel = new sap.ui.model.odata.ODataModel(sServiceUrl, true);
//Vamos montar antes o URI pra ver se fica tudo certinho:
var Uri = "/sap/opu/odata/SAP/YLOGGIN_DATA_SRV/LoginDataSet(User='" + oEntry.User + "',Password='" + oEntry.Password + "')";
OData.request({
requestUri: Uri,
method: "GET",
headers: {
"X-Requested-With": "XMLHttpRequest",
"Content-Type": "application/atom+xml",
"DataServiceVersion": "2.0",
"X-CSRF-Token": "Fetch"
}
},
function(data, response) {
if (data.Success === true) {
// show message
MessageToast.show(data.Message);
this.getRouter().navTo("CockpitGo");
} else {
// show message
MessageToast.show(data.Message);
}
},
要在浏览器中实现这一点,您可以过滤数据。在使用browserify
等工具将其嵌入后,使用像bleach这样的NodeJS模块来发送消息。Btw: MessageToast.show(data.Message);
应该在if/else之外,就像你在两个分支中调用它一样。
编辑:再考虑一下这个问题,您应该使用实际输入来测试在这个转义序列中真正处理了哪些字符。他们在谈论脚本和编写HTML,不确定这是否包括比'>' '<'更多的字符。
https://sapui5.netweaver.ondemand.com/sdk/文档/指导/4 de64e2e191f4a7297d4fd2d1e233a2d.html
可以通过确保不存在跨站点脚本(XSS)来阻止它中运行的应用程序页面中可以注入脚本代码浏览器。控件必须禁止向来自控件的页面写入脚本应用程序或来自其他用户保存的业务数据。以确保因此,以下两个措施必须结合起来:
类型化控件属性的验证
SAPUI5 core验证应用程序设置的属性值根据属性的类型。这保证了int类型是总是int和sap.ui。core/CSSSize是一个字符串,表示aCSS大小,不包含脚本标签。这也适用于枚举和控制id。控件呈现器可以依赖于此在编写HTML时进行检查。属性值
逃逸控件开发人员必须确保字符串控件属性和来自应用程序的其他值,但没有充分键入中包含的脚本标记在写入时被转义超文本标记语言为此,RenderManager和SAPUI5内核提供了helper方法。