我正在努力减轻我们对Poodle SSL 3.0 Fallback攻击的漏洞.我们的管理员已经开始禁用SSL,转而使用TLS进行服务器的入站连接.我们还建议我们的团队在其Web浏览器中禁用SSL.我现在正在查看我们的.NET代码库,它通过System.Net.HttpWebRequest启动与各种服务的HTTPS连接.我相信如果这些连接允许从TLS回退到SSL,则它们可能容易受到MITM攻击.这是我到目前为止所确定的.有人可以仔细检查一下以确认我是对的吗?这个漏洞是全新的,所以我还没有看到微软如何在.NET中缓解它的任何指导:
System.Net.Security.SslStream类的允许协议(支持.NET中的安全通信)通过System.Net.ServicePointManager.SecurityProtocol属性为每个AppDomain全局设置.
.NET 4.5中此属性的默认值是Ssl3 | Tls(虽然我找不到支持它的文档.)SecurityProtocolType是带有Flags属性的枚举,因此它是这两个值的按位OR.您可以使用以下代码行在您的环境中进行检查:
Console.WriteLine(System.Net.ServicePointManager.SecurityProtocol.ToString());
在应用程序中启动任何连接之前Tls,应该将其更改为正好或者可能Tls12:
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
重要提示:由于该属性支持多个按位标志,因此我假设SslStream 在握手期间不会自动回退到其他未指定的协议.否则,支持多个标志会有什么意义?
TLS 1.0与1.1/1.2的更新:
根据Google安全专家Adam Langley的说法,如果没有正确实施,TLS 1.0后来被发现容易受到POODLE的影响,因此您应该考虑专门转移到TLS 1.2.
我非常依赖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) 在过去的几天里,我们看到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会话状态分开.但由于少数特殊页面使用SQL Server Reporting Services,因此我们还需要启用ASP.NET会话状态.由于我们处于负载平衡环境中,因此我们在单独的后端计算机上启用了ASP.NET状态服务器(aspnet_state.exe或"进程外模式").
今天我注意到,当我们暂时关闭在Dev环境中运行State Service的机器时,Dev网站停止工作("无法向会话状态服务器发出会话状态请求.")尽管EnableSessionState ="False"在正在加载的页面上.
在为不使用会话状态的页面提供请求时,为什么ASP.NET需要连接到State Service?即使页面不使用母版页,基页或任何用户控件,这似乎也会发生.我搜索了所有代码隐藏,以确保我们从不以编程方式重新启用会话状态或尝试访问它.
---更多故障排除后编辑---
正如下面的用户所建议的那样,我尝试从头开始创建一个网站来重新测试,而不会出现任何来自httpHandlers,httpModules或其他自定义逻辑的复杂情况.
<sessionState mode="StateServer" stateConnectionString="tcpip=localhost:42424" />在<system.web>元素下添加并启动了我的本地ASP.NET状态服务".在这一点上,我感到困惑,因为其他用户声称他们尝试了类似的东西并没有遇到同样的问题.所以我想知道它是否与使用VB.NET有关(虽然听起来很傻.)更多的人使用C#进行ASP.NET,所以我用C#网站重新进行了上面的测试,并且看到,当时没有例外.访问页面!如果我将EnableSessionState设置为True并实际访问代码中的Session集合,我只会遇到异常.
这证明ASP.NET中的VB.NET站点的行为略有不同,因为它们访问每个页面上的会话状态,即使页面不需要.不幸的是,这并没有回答我原来的问题:为什么?
我将把它交叉发布到官方的ASP.NET论坛,看看那里是否有任何大师可以解释一下.
这个很简单.为什么下面的代码导致下面的错误?
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提交错误报告,除非有人有更好的解释.
我想缓存单个实例以DataContractSerializer供多个线程同时使用,以避免为同一根类型多次实例化序列化器带来的损失。每个线程将序列化一个不同的对象,但该DataContractSerializer对象本身将被共享。(我不会使用IDataContractSurrogateor DataContractResolver,这显然与更复杂/正式的 XML/XSD 模式相关。)
我会好吗?
在 MSDN 的 System.Runtime.Serialization.DataContractSerializer 的“线程安全”下,它说:
此类的实例是线程安全的,除非该实例与 IDataContractSurrogate 或 DataContractResolver 的实现一起使用。
我发现这有点模糊(这是典型的 MSDN 线程安全指南),但它似乎表明我的用例是合适的。如果您能指出个人经验、单元测试或演示它的框架反汇编,那就太好了:)
PS 我不认为这与Is WCF's DataContractSerilaizer thread safe?重复。因为那个人的问题结果与本身的线程安全无关DataContractSerializer。
我正在构建一个可能包含数十个单独项目的购物车页面.每个项目都有一个可折叠面板,其中包含几个可用于自定义它的表单元素.大多数购物车都包含在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) .net ×3
asp.net ×3
.net-4.6 ×1
asp.net-3.5 ×1
asp.net-ajax ×1
crash ×1
find ×1
iis ×1
javascript ×1
sql-server ×1
ssl ×1
vb.net ×1
w3wp ×1