繁体   English   中英

验证用户名和密码时,如何防止使用JavaScript SAPUI5进行跨站点脚本编写?

[英]How can I prevent Cross-Site-Scripting using JavaScript SAPUI5 When validating user and password?

很棒的人,我正在使用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);

                    }
                },

为了使这个在浏览器中,你可以使用一个模块的NodeJS像过滤data.message 漂白剂 ,具有类似工具嵌入之后browserify

顺便说一句: MessageToast.show(data.Message); 应该在if / else之外,因为您在两个分支中都将其称为。

编辑:再次考虑这一点,您应该使用真实输入来测试在此转义序列中真正处理过哪些字符。 他们正在谈论脚本并编写HTML,现在不确定是否包含的字符多于'>''<'。

https://sapui5.netweaver.ondemand.com/sdk/#docs/guide/4de64e2e191f4a7297d4fd2d1e233a2d.html

通过确保无法将脚本代码注入到在浏览器中运行的应用程序页面中,可以防止跨站点脚本(XSS)。

控件必须禁止将脚本编写到来自应用程序或其他用户保存的业务数据的页面上。 为了确保这一点,必须将以下两个措施结合起来:

验证键入的控件属性

SAPUI5核心根据属性的类型验证应用程序设置的属性的值。 这样可以保证int始终是int,而sap.ui.core / CSSSize是表示CSS大小的字符串,并且不包含脚本标签。 这也适用于枚举和控件ID。 编写HTML时,控件渲染器可以依靠此检查。 以这种方式键入的属性值无需转义即可写入

转义

控件开发人员必须确保在写入HTML时,转义了来自应用程序的字符串控件属性和其他值,它们的类型不足以排除包含的脚本标签。 为此,RenderManager和SAPUI5核心提供了辅助方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM