我们对代码进行了安全审核,他们提到我们的代码容易受到外部实体(XXE)攻击.我正在使用以下代码 -
string OurOutputXMLString=
"<ce><input><transaction><length>00000</length><tran_type>Login</tran_type></transaction><user><user_id>ce_userid</user_id><subscriber_name>ce_subscribername</subscriber_name><subscriber_id>ce_subscriberid</subscriber_id><group_id>ce_groupid</group_id><permissions></permissions></user><consumer><login_details><username>UnitTester9</username><password>pDhE5AsKBHw85Sqgg6qdKQ==</password><pin>tOlkiae9epM=</pin></login_details></consumer></input></ce>"
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(OurOutputXMLString);
Run Code Online (Sandbox Code Playgroud)
在审计报告中,他们说它失败了,因为XML实体可以包含可以在预期的控制之外解析的URL.XML实体解析器将尝试解析和检索外部引用.如果可以将攻击者控制的XML提交给其中一个功能,则攻击者可以访问有关内部网络,本地文件系统或其他敏感数据的信息.为了避免这种情况,我编写了以下代码,但它不起作用.
MemoryStream stream =
new MemoryStream(System.Text.Encoding.Default.GetBytes(OurOutputXMLString));
XmlReaderSettings settings = new XmlReaderSettings();
settings.DtdProcessing = DtdProcessing.Prohibit;
settings.MaxCharactersFromEntities = 6000;
XmlReader reader = XmlReader.Create(stream, settings);
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(reader);
Run Code Online (Sandbox Code Playgroud)
但我可以在这里看到,读者没有任何值加载到xmlDoc(XmlDocument).任何人都可以帮我错过的地方吗?任何帮助表示赞赏!
我是C++的新手,我正在编写以下代码.我需要遍历调用函数中的所有插件 - testFunction.我知道这在C#中有效,但是这段代码不起作用.任何人都可以指出在C++中正确的方法吗?
#include "stdafx.h"
#include <iostream>
#include "resource.h"
int testFunction(char* tester);
int _tmain()
{
int mainProd=2;
int Addons[]={7,8,9,10};
testFunction(mainProd,Addons);
}
void testFunction(int mainProd,int addons[])
{
for(int x = 0 ; addons.length;++x) ---- Not working
{
std::cout<< addons[x];
}
}
Run Code Online (Sandbox Code Playgroud)
我试图按照以下建议实现矢量
#include "stdafx.h"
#include <iostream>
#include "resource.h"
#include <vector>
void testFunction(std::vector<int> addons);
int _tmain(int argc, _TCHAR* argv[])
{
std::vector<int> Addons ;
for(int i = 0 ;i<10;++i)
{
Addons.push_back(i);
}
testFunction(Addons);
}
void testFunction(std::vector<int> addons)
{
for(int i =0 ; …Run Code Online (Sandbox Code Playgroud) 我是c ++的新手.我试图编写以下代码,用新值填充数组的每个字节而不覆盖其他字符.下面的每个字节(r)应该在数组的新地址处加起来.
int _tmain(int argc, _TCHAR* argv[]) {
char y[80];
for(int b = 0; b < 10; ++b) {
strcpy_s(y, "r");
}
}
Run Code Online (Sandbox Code Playgroud)
如果c ++中有任何可以执行此操作的功能,请告诉我.在上面的例子中,值'r'是任意的,这可以有任何新值.因此得到的字符数组应包含值rrrrr ... 10次.非常感谢您提前做好准备.
我是C++的新手.我正在编写以下简单代码.我想将字符[40]传递给一个函数,然后得到与输出相同的东西.如果我在下一点进行调试.strcpy_s(X,100,测试仪);
但如果我写"这是在输出端发送",它只需要"这个".任何人都可以请指出我缺少什么,并说明只接受几个字符的原因.
// BUSTesting.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
#include "resource.h"
int testFunction(char* tester);
int _tmain()
{
char m[40];
std::cin>>m;
testFunction(m);
}
int testFunction(char* tester)
{
char x[100] ;
memset(x,100,sizeof(x));
strcpy_s(x,100,tester);
std::cout<<x;
return 0;
}
Run Code Online (Sandbox Code Playgroud)