我正在通过.NET的HttpClient调用一个服务错误,尝试通过本地代理(Fiddler)路由请求,但我的代理设置似乎没有生效.
这是我创建客户端的方式:
private HttpClient CreateHttpClient(CommandContext ctx, string sid) {
var cookies = new CookieContainer();
var handler = new HttpClientHandler {
CookieContainer = cookies,
UseCookies = true,
UseDefaultCredentials = false,
Proxy = new WebProxy("http://localhost:8888", false, new string[]{}),
UseProxy = true,
};
// snip out some irrelevant setting of authentication cookies
var client = new HttpClient(handler) {
BaseAddress = _prefServerBaseUrl,
};
client.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
return client;
}
Run Code Online (Sandbox Code Playgroud)
然后我通过以下方式发送请求:
var response = CreateHttpClient(ctx, sid).PostAsJsonAsync("api/prefs/", smp).Result;
Run Code Online (Sandbox Code Playgroud)
请求直接进入服务器而不尝试命中代理.我错过了什么?
我正在使用.NET的HttpClient向WebAPI发出请求,该WebAPI返回一些需要在客户端进行一些自定义反序列化的JSON数据.为此,我已经制作了自己的JsonConverter,但我无法弄清楚如何让ReadAsAsync<T>方法获得转换器的存在.
我现在通过使用ReadAsStringAsync读取响应,然后将该字符串传递给我来解决我的问题JsonConvert.DeserializeObject,但似乎应该有一个更优雅的解决方案.
这是我的代码:
public PrefsResponse GetAllPrefs(string sid) {
HttpClient client = CreateHttpClient(null, sid);
var response = client.GetAsync("api/sites/" + sid).Result;
// TODO : find a way to hook custom converters to this...
// return response.Content.ReadAsAsync<PrefsResponse>().Result;
var stringResult = response.Content.ReadAsStringAsync().Result;
return JsonConvert.DeserializeObject<PrefsResponse>(stringResult, new PrefClassJsonConverter());
}
Run Code Online (Sandbox Code Playgroud)
这是我能做的最好的,还是有更优雅的方式?
这里也是我创建HttpClient的地方,如果那是我需要连接它的地方:
private HttpClient CreateHttpClient(CommandContext ctx, string sid) {
var cookies = new CookieContainer();
var handler = new HttpClientHandler {
CookieContainer = cookies,
UseCookies = true,
UseDefaultCredentials = false …Run Code Online (Sandbox Code Playgroud) 我们的一些客户已经知道我们所有JSONP端点中存在感知的XSS漏洞,但我不同意它是否真的构成了漏洞.想要得到社区的意见,以确保我没有遗漏一些东西.
因此,与任何jsonp系统一样,我们有一个端点,如:
http://foo.com/jsonp?cb=callback123
Run Code Online (Sandbox Code Playgroud)
其中cb参数的值在响应中重放:
callback123({"foo":"bar"});
Run Code Online (Sandbox Code Playgroud)
客户抱怨我们没有过滤掉CB参数中的HTML,所以他们会设计一个这样的例子:
http://foo.com/jsonp?cb=<body onload="alert('h4x0rd');"/><!--
Run Code Online (Sandbox Code Playgroud)
显然,对于返回内容类型的URL text/html,这会产生一个问题,即浏览器呈现该HTML然后在onload处理程序中执行潜在的恶意javascript.可用于窃取cookie并将其提交给攻击者的网站,甚至可以生成虚假的网络钓鱼登录屏幕.用户检查域并发现它是他信任的域名,因此他会使用agead并登录.
但是,在我们的例子中,我们设置的内容类型标头application/javascript会导致不同浏览器中的各种不同行为.即Firefox只显示原始文本,而IE打开一个"另存为..."对话框.我认为其中任何一个都不是特别可利用的.Firefox用户不会阅读恶意文本,告诉他跳过桥梁并思考其中的大部分内容.并且IE用户可能会被"另存为"对话框混淆并点击"取消".
我想我可以看到IE用户被欺骗保存并打开.js文件的情况,然后该文件通过微软JScript引擎获取对用户机器的各种访问权限; 但这似乎不太可能.这是最大的威胁还是我错过了一些其他漏洞?
(显然我要通过过滤来"修复"只接受一个有效的javascript标识符,只有一些长度限制,但我只想要一个关于我可能错过的其他威胁的对话框.)
我们的客户希望跟踪用户何时(通过脸书,推特,电子邮件等)分享链接,并奖励最初分享链接的人.目前,我们通过包含用户ID的URL上的参数来跟踪,即
http://www.customer.com/items/item1?sharedBy=user1
因此,当用户点击该链接时,我们当前正在使用该URL向用户的墙发布标准墙帖.当user1的朋友点击该链接时,我们可以读取sharedBy参数并为user1提供一些推荐信用.
我们还将我们的一些操作从标准墙上的帖子转移到新的OpenGraph操作,这会产生问题.为了被Facebook识别,opengraph对象具有如下元数据:
<meta property="fb:app_id" content="MY_APP_ID" />
<meta property="og:title" content="test item 1" />
<meta property="og:type" content="mynamespace:item" />
<meta property="og:url" content="http://www.customer.com/items/item1" />
<meta property="og:image" content="http://img.fark.net/images/2011/site/farkLogoBig.png" />
Run Code Online (Sandbox Code Playgroud)
无论我向Facebook提交哪个URL,它都会在构造链接时使用规范URL(og:url标记).所以,没有我的跟踪参数.
我可以想到几种方法来解决它:
有没有第三种方法我没有看到会让我强迫Facebook在链接中添加额外的参数回到我的页面?
我正在开发一个调用外部进程的应用程序,如下所示:
ProcessStartInfo startInfo = new ProcessStartInfo(PathToExecutable, Arguments){
ErrorDialog = false,
RedirectStandardError = true,
RedirectStandardOutput = true,
UseShellExecute = false,
CreateNoWindow = true,
WorkingDirectory = WorkingDirectory
};
using (Process process = new Process()) {
process.StartInfo = startInfo;
process.Start();
process.BeginErrorReadLine();
process.BeginOutputReadLine();
process.WaitForExit();
return process.ExitCode;
}
Run Code Online (Sandbox Code Playgroud)
我正在调用的进程之一取决于我不希望我的用户设置的环境变量。有没有办法修改发送到外部进程的环境变量?理想情况下,我可以让它们仅对正在运行的进程可见,但是如果我必须以编程方式在系统范围内设置它们,我会满足于此(但是,UAC 会强制我以管理员身份运行吗? )
ProcessStartInfo.EnvironmentVariables 是只读的,所以很多帮助是...