小编Bre*_*ias的帖子

跨域表单POST

我已经看过关于这个主题的文章和帖子(包括SO),而流行的评论是同源策略阻止跨域的表单POST.我见过的唯一一个人建议同源政策不适用于表格帖子,就在这里.

我想从更"官方"或正式的消息来源得到答案.例如,有没有人知道解决同源来源如何影响表格POST的RFC?

澄清:我不是在询问是否可以构建GET或POST并将其发送到任何域.我在问:

  1. 如果Chrome,IE或Firefox允许来自域"Y"的内容向域"X"发送POST
  2. 如果接收POST的服务器实际上会看到任何表单值.我这样说是因为大多数在线讨论记录测试人员说服务器收到了帖子,但表单值都是空的/剥离的.
  3. 什么官方文档(即RFC)解释了预期的行为(无论浏览器当前实现了什么).

顺便提一下,如果同源不影响表单POST,那么它就会更清楚地说明为什么需要使用防伪令牌.我说"有些"因为似乎很容易相信攻击者可以简单地发出HTTP GET来检索包含防伪令牌的表单,然后进行包含相同令牌的非法POST.评论?

html security http csrf same-origin-policy

135
推荐指数
3
解决办法
10万
查看次数

.Net Core和NuGet

从这个站点安装了.net核心.使用它导致了许多相关的包管理问题:

  1. dotnet restore命令继续"安装".net核心NuGet包.那些包装"安装"在哪里?未创建新文件夹.
  2. dotnet restore为"Hello World"的最小要求的约一百名的NuGet包,其中99%的人想必无关的"Hello World"的应用实例.当然,.net本机构建将删除所有不需要的东西 - 但我预计它restore也会抓住很少(三个或四个包,而不是一百个).为什么会这样?
  3. 我创建了第二个"hello world"项目并再次运行dotnet restore.这次没有安装任何软件包.似乎所有安装的软件包都是第一次安装到一些全球位置进行共享.我以为.Net Core没有那样工作.我认为.Net Core项目将所有依赖项保存在本地.我定位的唯一框架是dnxcore50.为什么会这样?
  4. 我想"卸载"所有这些全局包,然后再试一次(仅用于学习目的).怎么可能完成?请记住,正如问题#1所述,我不知道所有这些文件的安装位置.
  5. 几乎所有通过restore命令安装的软件包都列为beta版.奇.我以为.Net Core在RC1,而不是beta.对此感到困惑.为什么会这样?

我也很好奇哪些文档可以/将要解释所有这些对我来说.我尝试使用谷歌搜索这些问题,并没有发现任何东西(也许只是可怕的google-fu?).

.net nuget .net-core

61
推荐指数
2
解决办法
3万
查看次数

RabbitMQ有Nodedown错误

在Windows 7企业版机器上,我重新安装了Erlang 17.4和RabbitMQ 3.4.3 x64.安装成功且平安无事.

我还没有尝试创建我的第一个队列或交换,但我已经看到了麻烦.这个问题类似于另一个SO帖子,但其他帖子似乎涉及群集,我没有.此外,其他海报可以通过重新启动RabbitMQ服务来规避他的问题; 这种方法对我不起作用.

我的"nodedown"问题在RabbitMQ命令提示符下很明显:

C:\ Program Files(x86)\ RabbitMQ Server\rabbitmq_server-3.4.3\sbin> rabbitmqctl status节点兔子的状态@ TPAJ05421843 ...
错误:无法连接到节点兔子@ TPAJ05421843:nodedown

诊断

试图联系:[rabbit @ TPAJ05421843]

rabbit @ TPAJ05421843:
*连接到TPAJ05421843上的epmd(端口4369)
*epmd报告:节点'rabbit'未
在TPAJ05421843 上的所有其他节点上运行:['RabbitMQ']
*建议:启动节点

当前节点详细信息:
- 节点名称:'rabbitmqctl-19884 @ TPAJ05421843'
- 主目录:H:\
- cookie哈希:PD4QQCYrf0TME9vIko3Xuw ==

基于以上所述,我选择检查明确命名为"RabbitMQ"的节点的状态.我明白了:

C:\ Program Files(x86)\ RabbitMQ Server\rabbitmq_server-3.4.3\sbin> rabbitmqctl -n RabbitMQ status
节点'RabbitMQ @ TPAJ05421843'的状态...
错误:无法连接到节点'RabbitMQ @ TPAJ05421843':nodedown

诊断

试图联系:['RabbitMQ @ TPAJ05421843']

RabbitMQ @ TPAJ05421843:
*连接到TPAJ05421843上的epmd(端口4369)
*epmd报告节点'RabbitMQ'在端口59301上运行
*TCP连接成功但Erlang分发失败
*建议:主机名不匹配?
*建议:cookie设置正确吗?

当前节点详细信息:
- 节点名称:'rabbitmqctl-23076 @ TPAJ05421843'
- 主目录:H:\
- cookie哈希:PD4QQCYrf0TME9vIko3Xuw …

windows erlang rabbitmq

60
推荐指数
6
解决办法
7万
查看次数

CQRS:命令返回值

关于命令是否应该具有返回值似乎存在无穷无尽的混淆.我想知道这种混乱是否仅仅是因为参与者没有陈述他们的背景或情况.

困惑

以下是混淆的例子......

  • Udi Dahan说命令"不会向客户端返回错误",但在同一篇文章中他展示了一个图表,其中命令确实将错误返回给客户端.

  • 微软新闻商店文章指出"命令......不会返回响应",但接着提出了一个含糊不清的警告:

随着围绕CQRS的战场经验的增长,一些实践巩固并倾向于成为最佳实践.部分地与我们刚才所说的相反......今天人们普遍认为命令处理程序和应用程序都需要知道事务操作是如何进行的.必须知道结果......

  • 吉米·博加德说" 命令总是有结果 ",但后来又付出了额外的努力来表明命令如何返回无效.

那么,命令处理程序是否返回值?

答案?

从Jimmy Bogard的" CQRS神话 "中得到启示,我认为这个问题的答案取决于你所说的程序/语境"象限":

+-------------+-------------------------+-----------------+
|             | Real-time, Synchronous  |  Queued, Async  |
+-------------+-------------------------+-----------------+
| Acceptance  | Exception/return-value* | <see below>     |
| Fulfillment | return-value            | n/a             |
+-------------+-------------------------+-----------------+
Run Code Online (Sandbox Code Playgroud)

验收(例如验证)

命令"Acceptance"主要指验证.推测验证结果必须与调用者同步,无论命令"履行"是同步还是排队.

但是,似乎许多从业者不会从命令处理程序中启动验证.从我所看到的,它要么是因为(1)他们已经找到了在应用层处理验证的绝妙方法(即ASP.NET MVC控制器通过数据注释检查有效状态)或​​者(2)架构假设命令被提交给(进程外)总线或队列.后面这些异步形式通常不提供同步验证语义或接口.

简而言之,许多设计人员可能希望命令处理程序将验证结果作为(同步)返回值提供,但它们必须遵守它们使用的异步工具的限制.

履行

关于命令的"履行",发出命令的客户端可能需要知道新创建的记录的scope_identity或者可能需要知道故障信息 - 例如"帐户透支".

在实时设置中,似乎返回值最有意义; 不应使用例外来传达与业务相关的失败结果.但是,在"排队"环境中......返回值自然没有意义.

这是所有困惑可能总结的地方:

许多(大多数?)CQRS从业者假设他们现在或将来会合并异步框架或平台(总线或队列),从而宣称命令处理程序没有返回值.但是,一些从业者无意使用此类事件驱动的构造,因此他们将支持(同步)返回值的命令处理程序.

因此,例如,我相信Jimmy Bogard提供此示例命令界面时会假设同步(请求 - 响应)上下文:

public interface ICommand<out TResult> { }

public interface ICommandHandler<in TCommand, out TResult>
    where TCommand : …
Run Code Online (Sandbox Code Playgroud)

architecture design-patterns command-pattern cqrs

59
推荐指数
3
解决办法
1万
查看次数

LINQ"OrderBy"使用什么排序算法?

显然LINQ的"OrderBy"最初被指定为不稳定,但到Orca时,它被指定为稳定.并非所有文档都已相应更新 - 请考虑以下链接:

但是,如果LINQ的OrderBy现在"稳定",那么这意味着它没有使用快速排序(这本质上是不稳定的),即使某些文档(例如Troy的书)说它是.所以我的问题是:如果不是快速排序,那么LINQ的orderBy使用的实际算法是什么?

linq sorting algorithm quicksort

49
推荐指数
3
解决办法
1万
查看次数

在交换机中使用'转到'?

我已经看到了建议的编码标准Never use goto unless in a switch statement fall-through.

我不跟随.这个"例外"案件究竟是什么样的,这证明了一个goto

c# coding-style goto switch-statement

48
推荐指数
4
解决办法
4万
查看次数

安装人员:WIX或Inno设置?

我正在比较这两个工具.我的印象是:

  • Inno Setup不会产生MSI,但可以完成WIX所能做的一切
  • WIX确实产生了MSI,但学习曲线陡峭

你同意这种特征吗?还有什么其他差异?WIX#如何改变这个故事?由于Inno Setup不使用Windows安装程序,卸载有困难吗?根据命令,Inno Setup可以将安装降级到早期版本 - 还是只能安装/升级应用程序?

windows installer inno-setup wix

46
推荐指数
4
解决办法
2万
查看次数

ASP.NET核心中AsyncLocal的安全性

对于.NET Core,AsyncLocal它是替代品CallContext.但是,目前还不清楚在ASP.NET Core中使用它是多么"安全".

在ASP.NET 4(MVC 5)和更早版本中,ASP.NETCallContext线程敏捷性模型变得不稳定.因此,在ASP.NET中,实现每请求逻辑上下文行为的唯一安全方法是使用HttpContext.Current.Items.在幕后,HttpContext.Current.Items实现了CallContext,但它以一种对ASP.NET安全的方式完成.

相反,在OWIN/Katana Web API的上下文中,线程敏捷性模型不是问题.在仔细考虑如何正确处理它之后,我能够安全地使用CallContext .

但现在我正在处理ASP.NET Core.我想使用以下中间件:

public class MultiTenancyMiddleware
{
    private readonly RequestDelegate next;
    static int random;

    private static AsyncLocal<string> tenant = new AsyncLocal<string>();
    //This is the new form of "CallContext".
    public static AsyncLocal<string> Tenant
    {
        get { return tenant; }
        private set { tenant = value; }
    }

    //This is the new verion of [ThreadStatic].
    public static ThreadLocal<string> LocalTenant; …
Run Code Online (Sandbox Code Playgroud)

c# .net-core asp.net-core

44
推荐指数
2
解决办法
9134
查看次数

使用基于声明的授权

新的ASP.NET 4.5代码已将ASP.NET RoleProvider"重新定位"为ClaimsProvider.

我想弄清楚的是,基于"声明的"授权示例是什么样的(最好是在MVC4中)?我的Authorize属性如何与此功能交互?WebSecurity和Roles API没有改变; 没有"DoesUserHaveClaim()"签名.同样,目前尚不清楚Authorize属性如何与声明进行交互.

这种"声明授权"功能主要用于OAuth吗?如果是,请求如何转发到我的申请?一块饼干?或者这种声明提供程序功能是否适用于更广泛的用途?

简而言之,使用ClaimsPrincipal的故事是什么?

我所看到的最接近的东西是有意义的,就是这个讨论.但我怀疑这是过时的 - 它应该与MVC4互联网项目模板产生的相比.即便如此,它仍然没有建议如何在设置中使用Authorize属性.

UPDATE

我从这些来源找到了我的问题的答案:

  1. ClaimsPrincipal的备注部分解释说,WebSecurity,Roles和AuthorizeAttribute API实际上可以根据需要进行声明检查.
  2. 这里是基于声明的MVC4示例(以及其他示例).
  3. 这里显示了基本的SAML故事.

authorization asp.net-mvc-4 asp.net-4.5

37
推荐指数
1
解决办法
2万
查看次数

什么是C#"逻辑调用上下文"的Java等价物

在.net中,有一个"超级"线程本地存储(TLS),它允许任意TLS数据自动地从一个线程"跳转"到另一个线程.它基于CallContext类.

换句话说,逻辑请求可以产生新线程的层次结构 - 并且每个线程都可以访问原始线程的相同TLS.这是一个非常强大的功能,特别是对于日志记录,授权,多租户或品牌问题.

Java中的等价物是什么?

仅在.net 4.5中,"logical callcontext"获得了"写入时复制"功能,允许线程对逻辑callcontext进行私有修改.换句话说,.net仍然在成熟这种能力并提供更大的稳定性.

如果Java有一个等价的概念,它有多稳定?它有什么问题?

澄清

我已经知道Java具有线程本地存储(TLS)功能.这不是问题.我问的是Java是否具有等效的.net"逻辑调用上下文",这是一个比简单的TLS更强大的构造.

c# java multithreading

33
推荐指数
1
解决办法
1079
查看次数