小编Mik*_*lin的帖子

使用.NET 4.5 HttpClient代理

我正在通过.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 .net-4.5 asp.net-web-api

51
推荐指数
2
解决办法
5万
查看次数

.net HttpClient与自定义JsonConverter

我正在使用.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)

.net json asp.net-web-api dotnet-httpclient

15
推荐指数
1
解决办法
9983
查看次数

明显的jsonp xss漏洞

我们的一些客户已经知道我们所有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标识符,只有一些长度限制,但我只想要一个关于我可能错过的其他威胁的对话框.)

javascript security xss jsonp

6
推荐指数
1
解决办法
5806
查看次数

将跟踪参数添加到Facebook时间线操作的链接

我们的客户希望跟踪用户何时(通过脸书,推特,电子邮件等)分享链接,并奖励最初分享链接的人.目前,我们通过包含用户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标记).所以,没有我的跟踪参数.

我可以想到几种方法来解决它:

  1. 动态生成og:url的值以匹配facebook正在查看的任何URL.我宁愿不在我的所有客户身上投入更多的实施开销(他们中的许多人并不具备足够的技术能力来实现这一目标而无需大量的手持操作).似乎Facebook可能会反对这一点,因为它基本上将每个URL视为一个单独的对象,即使它们真的是相同的.
  2. Facebook确实在URL上添加了一个fb_action_ids参数.我可以通过图形API获取这些并从中提取Facebook用户ID,然后将该ID与我的内部用户ID进行协调.宁愿不写所有额外的代码而不是重用任何其他共享机制使用的相同参数.

有没有第三种方法我没有看到会让我强迫Facebook在链接中添加额外的参数回到我的页面?

facebook opengraph facebook-timeline facebook-opengraph

6
推荐指数
1
解决办法
2539
查看次数

将自定义环境变量传递给 System.Diagnostics.Process

我正在开发一个调用外部进程的应用程序,如下所示:

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 是只读的,所以很多帮助是...

.net c# environment-variables

5
推荐指数
1
解决办法
4809
查看次数