小编Dyl*_*tie的帖子

使用.NET FormsAuthentication和持久性cookie改变密码的安全漏洞?

好的,这是一个场景:

  1. Bob登录到使用.NET表单身份验证的mysite.com,然后勾选"记住我".
  2. Eve窃取了Bob的笔记本电脑
  3. 鲍勃得到一台新笔记本电脑,并更改了他的密码.

现在,在这一点上,Eve有一个被盗的笔记本电脑,它上面有一个持久的cookie,它将把她作为Bob登录到mysite.com - 据我所知,即使Bob改变了他的话,这也会有效.密码.

默认情况下,表单身份验证cookie不包含Bob的密码(无论是明文密码,散列密码还是其他加密密码) - 因此Bob的密码根本不涉及cookie身份验证过程,并且上周工作的用户名仍然可用今天.

这是一个容易解决的漏洞 - 通过简单地设置FormsAuthentication.SetAuthCookie("username:passwordHash")或其他东西,然后在您的身份验证处理程序中解密和拆分cookie - 但我很难相信这个问题存在于'开箱即用' ......我错过了什么吗?

编辑:请注意,我在这里假设"记住我"按钮的目的是阻止您每次访问网站时都输入密码.这适用于Facebook,Twitter,Gmail,以及我能想到的几乎所有其他网站 - 如果这不是.NET FormsAuthentication中'持久性cookie'选项的目的,我会感到非常惊讶.

此外,是的,我接受在每个传入的请求上执行双因素身份验证会产生一定的开销,但实际上它只比根据用户名从数据库中检索用户稍微贵一些,而您可能正在做的事情. .

编辑2:似乎至少有一个主要的.NET站点 - CodePlex.com - 容易受此影响; 见http://codeplex.codeplex.com/discussions/350646

asp.net security cookies forms-authentication

14
推荐指数
2
解决办法
1348
查看次数

是否有一个nuget.exe命令行等效的Uninstall-Package?

我正在开发一个NuGet包,它将一堆内容 - 视图,脚本,CSS文件 - 安装到Web应用程序中,并尝试改进更改 - 编译 - 测试周期.我有两个项目 - 框架本身("包")和使用它的演示网络应用程序("网站")

作为Visual Studio构建过程的一部分,我需要做的是:

  1. (作为Package post-build的一部分)Nuget pack Package.nuspec -OutputDirectory ..\pkg \
  2. (作为网站预构建的一部分)Nuget卸载包
  3. (作为网站预构建的一部分)Nuget安装包-source ..\pkg \

问题是 - 似乎没有任何命令行等效Uninstall-Package于NuGet Package Manager控制台.我错过了什么吗?

visual-studio-2010 nuget nuget-package

14
推荐指数
1
解决办法
3757
查看次数

如何在NServiceBus中按名称空间配置MessageEndpointMapping

我试图通过从不同的命名空间向不同的端点发送消息来配置我的NServiceBus配置中的消息端点映射.

因此,我在web.config中配置了以下内容:

<MessageEndpointMappings>
    <add Messages="Company.Messages.Accounts" Endpoint="ServiceInput" />
    <add Messages="Company.Messages.Payments" Endpoint="ServiceInput" />
    <add Messages="Company.Messages.Cancellations" Endpoint="ServiceInput" />
    <add Messages="Company.Messages.Notifications" Endpoint="ServiceInput" />
</MessageEndpointMappings>
Run Code Online (Sandbox Code Playgroud)

但是,当我的应用程序启动时,我收到以下异常:

Spring.Objects.PropertyAccessExceptionsException:PropertyAccessExceptionsException(1个错误); 嵌套的PropertyAccessExceptions是:[Spring.Core.TypeMismatchException:无法将类型[System.Collections.Hashtable]的属性值转换为属性'MessageOwners'所需的类型[System.Collections.IDictionary].,内部异常:System.ArgumentException:问题加载消息程序集:Company.Messages.Payments ---> System.IO.FileNotFoundException:无法加载文件或程序集"Company.Messages.Payments"或其依赖项之一.该系统找不到指定的文件.文件名称:'Company.Messages.Payments'

我觉得有趣的是它似乎找到了Company.Messages.Accounts但在第二个配置的行上失败了.我想也许它不喜欢让它们全部转到同一个端点,但更改此配置以使它们进入不同的端点并没有改变我收到的错误消息.

我究竟做错了什么?是不是可以通过命名空间来分割消息(我所见过的只是按类型和汇编)?

谢谢,史蒂夫

messaging msmq nservicebus

12
推荐指数
2
解决办法
7910
查看次数

如何通过DotNetOpenAuth使用OAuth2访问令牌授权访问ServiceStack资源?

我使用DotNetOpenAuth创建了一个OAuth2授权服务器,它工作正常 - 我正在使用资源所有者密码流,并成功地为访问令牌交换用户凭据.

我现在想要使用该访问令牌从ServiceStack API中的安全端点检索数据,我无法弄清楚如何执行此操作.我已经检查了ServiceStack附带的Facebook,Google等提供商,但目前尚不清楚我是否应该遵循相同的模式.

我想要实现的目标(我想!)是

  1. OAuth 客户端(我的应用程序)要求资源所有者('Catherine Smith')提供凭据
  2. 客户端授权服务器提交请求,接收访问令牌
  3. 客户端资源服务器请求安全资源() GET /users/csmith/photos
    • 访问令牌被包括在HTTP头,例如 Authorization: Bearer 1234abcd...
  4. 资源服务器解密访问令牌验证的身份资源拥有者
  5. 资源服务器会检查资源所有者可以访问请求的资源
  6. 资源服务器返回的资源客户

步骤1和2正在运行,但我无法弄清楚如何将DotNetOpenAuth资源服务器代码与ServiceStack授权框架集成.

我是如何实现这一目标的?我在如何使用ServiceStack构建安全api作为OAuth2.0的资源服务器时发现了类似的StackOverflow帖子但它不是一个完整的解决方案,似乎没有使用ServiceStack授权提供程序模型.

编辑:更多细节.这里有两个不同的网络应用程序.一个是身份验证/授权服务器 - 它不承载任何客户数据(即没有数据API),但公开了接受用户名/密码并返回OAuth2访问令牌和刷新令牌的/ oauth/token方法,还有提供令牌刷新功能.这是基于ASP.NET MVC构建的,因为它几乎与DotNetOpenAuth附带的AuthorizationServer示例相同.这可能会在以后更换,但现在它是ASP.NET MVC.

对于实际的数据API,我使用的是ServiceStack,因为我发现它比WebAPI或MVC更好地暴露了ReSTful数据服务.

所以在下面的例子中:

序列图

客户端是用户的本地机器上运行的桌面应用程序,该验证服务器是ASP.NET MVC + DotNetOpenAuth和资源服务器是ServiceStack

需要的特定DotNetOpenAuth代码片段是:

// scopes is the specific …
Run Code Online (Sandbox Code Playgroud)

dotnetopenauth oauth-2.0 servicestack

12
推荐指数
2
解决办法
6686
查看次数

通过jQuery检测对特定HTML 5功能的支持

我正在研究一些HTML5演示代码,包括类似的东西 <input type="date" />

这当前在Opera 10中正常工作,但每个其他浏览器只显示正常的文本输入.然后我使用jQuery.date-input插件在不支持它的浏览器上覆盖此行为.

问题是 - jQuery也在Opera上运行,所以在Opera中我得到两个日历日期选择器(一个来自浏览器,一个来自jQuery)

我现在可以解决这个问题if (window.opera)- 但是有一些方法可以使用jQuery.support,我可以可靠地检测当前浏览器是否支持特定的HTML5功能吗?

jquery html5 jquery.support

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

当布局页面在〜/ Views/Shared之外时为什么Razor看不到ViewBag,Url.Content等?

我正在研究一个CSS框架,我可以将其作为NuGet包放入其他项目中.

为了保持清洁,整个框架 - 视图,样式,图像和母版页/布局页面 - 实际存储在〜/ CssThing /下

与WebForms视图引擎完美配合,但是当我将_layout.cshtml文件移动到〜/ CssThing /然后修改我的Razor页面时说:

@{
Layout = "~/CssThing/_layout.cshtml";
}
Run Code Online (Sandbox Code Playgroud)

它开始抱怨ViewBag没有被定义,或者说The name 'Url' does not exist in the current context,或者其他各种奇怪的东西表明视图不再继承正确的基类.

我怎样才能让它发挥作用?

注意:一切都像这样拆分的原因是没有办法强迫NuGet覆盖现有代码,并且没有办法在没有获取所有jQuery等引用的情况下启动空的MVC3 Web应用程序,所以不要冒险我的框架因为一半的文件已经存在,所以部署了一半,我保持一切完全独立.

layout razor viewbag

11
推荐指数
1
解决办法
6581
查看次数

为什么Resharper认为IPrincipal.Identity永远不会为空?

在VS2010中运行的Resharper 8告诉我我可以删除支票principal.Identity != null:

在此输入图像描述

我假设这是因为有一个NotNull属性或潜伏在IPrincipal的代码中的东西,但是编写自己的IPrincipal实现很容易返回null身份:

void Main() {
    var foo = new FooPrincipal();
    Console.WriteLine(foo.Identity == null ? "Yep!" : "Not Null");
}

class FooPrincipal : IPrincipal {
    public IIdentity Identity { get; set; }
    public bool IsInRole(string role) { return(false); }
    public FooPrincipal() {}
}
Run Code Online (Sandbox Code Playgroud)

Resharper如何知道传入此方法的IPrincipal不会成为我返回null身份的FooPrincipals之一?

编辑:好的,这是一个完整的复制案例,Resharper实际上鼓励你编写在生产中爆炸的代码......

using System;
using System.Security.Principal;

namespace ResharperPrincipalTest {
    class Program {
        static void Main(string[] args) {
            var p = new TestPrincipal();
            var isJeff = IsUserCalledJeff(p);
            Console.WriteLine(isJeff);
        }

        static bool IsUserCalledJeff(IPrincipal principal) …
Run Code Online (Sandbox Code Playgroud)

c# resharper iprincipal

11
推荐指数
1
解决办法
552
查看次数

在for()循环中声明的Javascript变量的范围是什么?

查看以下HTML/Javascript代码片段:

<html>
<head>
<script type="text/javascript">
var alerts = [];
for(var i = 0; i < 3; i++) {
    alerts.push(function() { document.write(i + ', '); });
}

for (var j = 0; j < 3; j++) {
    (alerts[j])();
}

for (var i = 0; i < 3; i++) {
    (alerts[i])();
}
</script>
</head><body></body></html>
Run Code Online (Sandbox Code Playgroud)

这输出:

3, 3, 3, 0, 1, 2
Run Code Online (Sandbox Code Playgroud)

这不是我所期待的 - 我期待输出 0, 1, 2, 0, 1, 2,

我(错误地)假设被推入数组的匿名函数将表现为闭包,捕获i创建函数时分配的值- 但它实际上表现i为行为全局变量.

任何人都可以解释i这个代码示例的范围内发生了什么,以及为什么匿名函数没有捕获它的值?

javascript puzzle scope anonymous-function

10
推荐指数
2
解决办法
664
查看次数

如何从我的C#XML文档注释中链接到MSDN /官方文档?

给出类似于这样的类的XML注释:

///<summary>Handles the AuthenticateRequest event in the ASP.NET page request lifecycle to authenticate users.</summary>
///<remarks>
///<para>This module will authenticate users based on cookies, form posts, or an impersonation request from the  admin system.</para>
///<para>If authentication succeeds, both the <see cref="System.Threading.Thread.CurrentPrincipal" /> and the <see cref="System.Web.HttpContext.User"/> property are set to an instance of <see cref="MyPrincipal"/> representing the authenticated user.</para>
///</remarks>
Run Code Online (Sandbox Code Playgroud)

如何获取对框架文档中相应页面的引用System.Threading.Thread.CurrentPrincipalSystem.Web.HttpContext.User链接?

msdn ndoc xml-documentation

10
推荐指数
1
解决办法
417
查看次数

为什么Object.Equals()在从不同的程序集中实例化时,对于相同的匿名类型返回false?

我有一些代码将强类型业务对象映射到匿名类型,然后将其序列化为JSON并通过API公开.

在将我的解决方案重组为单独的项目后,我的一些测试开始失败.我已经做了一些挖掘,事实证明,Object.Equals对来自不同程序集的代码返回的匿名类型的行为有所不同 - 我不知道为什么,或者我可以做些什么来解决它.

https://github.com/dylanbeattie/AnonymousTypeEquality有完整的repro代码,但实际上破坏的位在下面.此代码位于测试项目中:

[TestFixture]
public class Tests {
    [Test]
    public void BothInline() {
        var a = new { name = "test", value = 123 };
        var b = new { name = "test", value = 123 };
        Assert.That(Object.Equals(a,b)); // passes
    }

    [Test]
    public void FromLocalMethod() {
        var a = new { name = "test", value = 123 };
        var b = MakeObject("test", 123);
        Assert.That(Object.Equals(a, b)); // passes
    }

    [Test]
    public void FromOtherNamespace() {
        var …
Run Code Online (Sandbox Code Playgroud)

.net c# equality anonymous-types

10
推荐指数
2
解决办法
387
查看次数