小编Jor*_*ger的帖子

如何在.NET中禁用SSL回退并仅使用TLS进行出站连接?(贵宾犬缓解)

我正在努力减轻我们对Poodle SSL 3.0 Fallback攻击的漏洞.我们的管理员已经开始禁用SSL,转而使用TLS进行服务器的入站连接.我们还建议我们的团队在其Web浏览器中禁用SSL.我现在正在查看我们的.NET代码库,它通过System.Net.HttpWebRequest启动与各种服务的HTTPS连接.我相信如果这些连接允许从TLS回退到SSL,则它们可能容易受到MITM攻击.这是我到目前为止所确定的.有人可以仔细检查一下以确认我是对的吗?这个漏洞是全新的,所以我还没有看到微软如何在.NET中缓解它的任何指导:

  1. System.Net.Security.SslStream类的允许协议(支持.NET中的安全通信)通过System.Net.ServicePointManager.SecurityProtocol属性为每个AppDomain全局设置.

  2. .NET 4.5中此属性的默认值是Ssl3 | Tls(虽然我找不到支持它的文档.)SecurityProtocolType是带有Flags属性的枚举,因此它是这两个值的按位OR.您可以使用以下代码行在您的环境中进行检查:

    Console.WriteLine(System.Net.ServicePointManager.SecurityProtocol.ToString());

  3. 在应用程序中启动任何连接之前Tls,应该将其更改为正好或者可能Tls12:

    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;

  4. 重要提示:由于该属性支持多个按位标志,因此我假设SslStream 在握手期间不会自动回退到其他未指定的协议.否则,支持多个标志会有什么意义?

TLS 1.0与1.1/1.2的更新:

根据Google安全专家Adam Langley的说法,如果没有正确实施,TLS 1.0后来被发现容易受到POODLE的影响,因此您应该考虑专门转移到TLS 1.2.

.net ssl

103
推荐指数
5
解决办法
12万
查看次数

Visual Studio 2015在文件中查找不记住文件类型或位置

我非常依赖Visual Studio中的Find in Files对话框.(有时Intellisense/Resharper不会削减它.)自升级到2015年以来,我注意到对话框不记得会话之间的自定义"查找"路径或"查看这些文件类型"列表.

如果我关闭我的解决方案和VS实例,然后重新打开,我必须再次输入我的自定义路径和文件类型.浪费大量时间.有没有人遇到其他人遇到这个?任何解决方法?2013年曾经记得这个东西.

Microsoft Visual Studio Professional 2015
Version 14.0.23107.0 D14REL
Microsoft .NET Framework
Version 4.6.00081
Installed Version: Professional
Run Code Online (Sandbox Code Playgroud)

find visual-studio visual-studio-2015

19
推荐指数
2
解决办法
1954
查看次数

.NET 4.6升级后w3wp.exe与ThreadAbortException的间歇性崩溃

在过去的几天里,我们看到w3wp.exe工作进程间歇性崩溃,为我们公司网站的主应用程序池提供服务.有时崩溃是孤立的,IIS可以成功重启工作进程.但如果在5分钟内发生超过5次崩溃,IIS Rapid Fail Protection将启动并停止应用程序池.以下是崩溃前应用程序事件日志中的示例条目:

An unhandled exception occurred and the process was terminated.
Application ID: /LM/W3SVC/2/ROOT
Process ID: 3640
Exception: System.Threading.ThreadAbortException
Message: Thread was being aborted.
StackTrace:    at System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotificationHelper(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
   at System.Web.Hosting.PipelineRuntime.ProcessRequestNotification(IntPtr rootedObjectsPointer, IntPtr nativeRequestContext, IntPtr moduleData, Int32 flags)
Run Code Online (Sandbox Code Playgroud)

由于ThreadAbortException导致崩溃后立即记录了一个更严重的事件:

Faulting application name: w3wp.exe, version: 8.0.9200.16384, time stamp: 0x5010885f
Faulting module name: KERNELBASE.dll, version: 6.2.9200.17366, time stamp: 0x554d16f6
Exception code: 0xe0434352
Fault offset: 0x00010192
Faulting process id: 0xe38
Faulting …
Run Code Online (Sandbox Code Playgroud)

asp.net crash iis w3wp .net-4.6

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

为什么ASP.NET即使在页面的EnableSessionState ="False"时也访问State Server,但仅限于VB.NET站点,而不是C#站点?

我们的网站使用我们自己的自定义会话状态管理,与ASP.NET会话状态分开.但由于少数特殊页面使用SQL Server Reporting Services,因此我们还需要启用ASP.NET会话状态.由于我们处于负载平衡环境中,因此我们在单独的后端计算机上启用了ASP.NET状态服务器(aspnet_state.exe或"进程外模式").

今天我注意到,当我们暂时关闭在Dev环境中运行State Service的机器时,Dev网站停止工作("无法向会话状态服务器发出会话状态请求.")尽管EnableSessionState ="False"在正在加载的页面上.

在为不使用会话状态的页面提供请求时,为什么ASP.NET需要连接到State Service?即使页面不使用母版页,基页或任何用户控件,这似乎也会发生.我搜索了所有代码隐藏,以确保我们从不以编程方式重新启用会话状态或尝试访问它.

---更多故障排除后编辑---

正如下面的用户所建议的那样,我尝试从头开始创建一个网站来重新测试,而不会出现任何来自httpHandlers,httpModules或其他自定义逻辑的复杂情况.

  1. 我使用Visual Studio 2008 使用VB.NET创建一个新的"ASP.NET网站" .
  2. 我通过VS运行该站点,允许它启用调试模式并生成标准的web.config文件.
  3. <sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" /><system.web>元素下添加并启动了我的本地ASP.NET状态服务".
  4. 我将Default.aspx页面的EnableSessionState更改为False并重新加载页面= OK.
  5. 我停止了ASP.NET状态服务并重新加载了页面="无法向会话状态服务器发出会话状态请求".

在这一点上,我感到困惑,因为其他用户声称他们尝试了类似的东西并没有遇到同样的问题.所以我想知道它是否与使用VB.NET有关(虽然听起来很傻.)更多的人使用C#进行ASP.NET,所以我用C#网站重新进行了上面的测试,并且看到,当时没有例外.访问页面!如果我将EnableSessionState设置为True并实际访问代码中的Session集合,我只会遇到异常.

这证明ASP.NET中的VB.NET站点的行为略有不同,因为它们访问每个页面上的会话状态,即使页面不需要.不幸的是,这并没有回答我原来的问题:为什么?

我将把它交叉发布到官方的ASP.NET论坛,看看那里是否有任何大师可以解释一下.

.net vb.net asp.net session-state asp.net-3.5

7
推荐指数
1
解决办法
2093
查看次数

十进制(10,9)变量不能保持数字50(SQL Server 2008)

这个很简单.为什么下面的代码导致下面的错误?

declare @dTest decimal(10, 9)
set @dTest = 50
Run Code Online (Sandbox Code Playgroud)

错误:

Msg 8115, Level 16, State 8, Line 3
Arithmetic overflow error converting int to data type numeric.
Run Code Online (Sandbox Code Playgroud)

根据MSDN文档decimal(p, s),p(在我的情况或10)是"的可存储的,小数位最大总数二者的左侧和小数点的右边,而" s(或在我的情况9)被" 可以存储在小数点右侧最大小数位数".

我的数字50,总共只有2位数(小于最大值 10位),小数点右边的0位数(小于最大值 9 位数),因此它应该有效.

我发现这个问题基本上是同一个问题,但没有人解释为什么文档似乎与行为冲突.似乎s维度实际上被解释为小数点右边的固定位数,并从p号中减去,在我的情况下,10-9 =仅剩余1位数来处理左侧.

任何人都可以提供合理的方式来解释文档,以符合行为吗?

编辑:

我在下面看到一些解释,但它们没有解决文档措辞的根本问题.我会建议改变措辞:

为"P(精度)"改变"的十进制数字的最大总数可存储"读"的那个十进制数字的最大总数被存储的".

并且对于"s(比例)"更改"可以存储在小数点右侧的最大小数位数." to" 存储在小数点右侧的小数位数.从p中减去此数字以确定小数点左侧的最大位数."

我将向Connect提交错误报告,除非有人有更好的解释.

sql-server sql-server-2008

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

System.Runtime.Serialization.DataContractSerializer线程安全吗?

我想缓存单个实例以DataContractSerializer供多个线程同时使用,以避免为同一根类型多次实例化序列化器带来的损失。每个线程将序列化一个不同的对象,但该DataContractSerializer对象本身将被共享。(我不会使用IDataContractSurrogateor DataContractResolver,这显然与更复杂/正式的 XML/XSD 模式相关。)

我会好吗?

在 MSDN 的 System.Runtime.Serialization.DataContractSerializer 的“线程安全”下,它说:

此类的实例是线程安全的,除非该实例与 IDataContractSurrogate 或 DataContractResolver 的实现一起使用。

我发现这有点模糊(这是典型的 MSDN 线程安全指南),但它似乎表明我的用例是合适的。如果您能指出个人经验、单元测试或演示它的框架反汇编,那就太好了:)

PS 我不认为这与Is WCF's DataContractSerilaizer thread safe?重复。因为那个人的问题结果与本身的线程安全无关DataContractSerializer

.net thread-safety datacontractserializer

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

如何在ASP.NET异步回发之前禁用或删除不必要的表单元素?

我正在构建一个可能包含数十个单独项目的购物车页面.每个项目都有一个可折叠面板,其中包含几个可用于自定义它的表单元素.大多数购物车都包含在UpdatePanel中,这样我就可以在用户进行更改时避免完整的回发.当购物车中有很多商品时,当然有许多回发元素,所有这些元素都包含在原始表单中,即使每个帖子实际上只是由单个元素的更改触发(ChildrenAsTriggers = True).

我发现冗余表单名称/值对的未压缩大小是25K.由于浏览器中的gzip压缩,实际大小可能要小得多(我假设浏览器经常压缩回发值,但没有麻烦来验证这一点 - 任何人都知道肯定吗?)我知道我正在这里有点肛门("优化前的配置文件!")但我真的想找到一种方法来消除这些冗余数据.我提出了以下JavaScript:

Sys.WebForms.PageRequestManager.getInstance().add_beginRequest
(
  function(sender, args) {

    var elPostBackTrigger = args.get_postBackElement();

      // skip the first input element, which is expected to be the ScriptManager's hidden field
      removeNonEssentialPostBackValues(document.aspnetForm.getElementsByTagName("input"), elPostBackTrigger, 1);
      removeNonEssentialPostBackValues(document.aspnetForm.getElementsByTagName("select"), elPostBackTrigger);
      removeNonEssentialPostBackValues(document.aspnetForm.getElementsByTagName("textarea"), elPostBackTrigger);
   }
);

function removeNonEssentialPostBackValues(aElements, elPostBackTrigger, iFirstElement) {

    if (iFirstElement == undefined)
        iFirstElement = 0;

    for (var i = iFirstElement; i < aElements.length; ++i) {
        if
        (
            aElements[i] != elPostBackTrigger
            && aElements[i].name
            && aElements[i].name != ''
            && aElements[i].name.indexOf('_') != 0
        ) {
            aElements[i].removeAttribute('name');
            aElements[i].disabled …
Run Code Online (Sandbox Code Playgroud)

javascript asp.net asp.net-ajax

4
推荐指数
1
解决办法
1424
查看次数