.NET的变量在代码集中是不安全的
来源:互联网 发布:淘宝怎么提高销量 编辑:程序博客网 时间:2024/05/13 23:04
Author:水如烟
由于反射的引入,.NET的变量在代码集中并不安全。必须重视和把好源代码的审核关。
.NET的安全性问题是一个综合性的问题,这不是我现在能学习好理解透的,我估计也不是一般的.NET的编码者能够把握住应用好的。
至少,在代码集中,.NET的全局变量,或者说受Private修饰保护的对象,是不安全的。
在现实中有一个传话游戏,其要义是,信息在信息链的传递过程中会失真。.NET也一样,很难保证一个关键的信息在传递的过程中保持“纯洁”而不被潜伏中的攻击而受污染。特别是在大规模的代码集中。
SecureString类
在.NET的设计中,SecureString类应该是安全系数比较高的。它有两个作用,一是赋值后MakeReadOnly以便在后续的传递中不致修改,二是在必要的时候进行销毁。但是用它来传递关键信息,比如密码,还是不安全的。这个类里头有一个m_readOnly As Boolean的Private变量来保存当前实例可否修改的状态,你可以重置该值为False,便可以对它重新修改,MakeReadOnly也就失去了它本身的作用。
ReadOnlyCollection类
它的本义是不能对当前实例的项目进行增删。在它的设计中,用一个list的Private变量来存储当前集合。事实并不能保证它的作用。你甚至可以用自己的list替换了它。
测试代码
Imports System.Runtime.InteropServices
Imports System.Collections.ObjectModel
Public Class NoSecure
Public Sub TestSecureString()
Dim t As New Security.SecureString
t.AppendChar("A"c)
t.AppendChar("B"c)
t.MakeReadOnly()
Console.WriteLine(Marshal.PtrToStringAuto(Marshal.SecureStringToBSTR(t)))
Dim h As New LzmTW.uSystem.uReflection.TypeHelper(t)
h.SetMemberValue("m_readOnly", False)
t.AppendChar("C"c)
Console.WriteLine(Marshal.PtrToStringAuto(Marshal.SecureStringToBSTR(t)))
End Sub
Public Sub TestReadonlyCollection()
Dim t As New ReadOnlyCollection(Of String)(New String() {"A", "B", "C"})
For i As Integer = 0 To t.Count - 1
Console.Write(t.Item(i))
Next
Console.WriteLine()
Dim h As New LzmTW.uSystem.uReflection.TypeHelper(t)
Dim mNowList As New List(Of String)
mNowList.AddRange(New String() {"A", "B", "C", "D"})
h.SetMemberValue("list", mNowList)
For i As Integer = 0 To t.Count - 1
Console.Write(t.Item(i))
Next
End Sub
End Class
Imports System.Collections.ObjectModel
Public Class NoSecure
Public Sub TestSecureString()
Dim t As New Security.SecureString
t.AppendChar("A"c)
t.AppendChar("B"c)
t.MakeReadOnly()
Console.WriteLine(Marshal.PtrToStringAuto(Marshal.SecureStringToBSTR(t)))
Dim h As New LzmTW.uSystem.uReflection.TypeHelper(t)
h.SetMemberValue("m_readOnly", False)
t.AppendChar("C"c)
Console.WriteLine(Marshal.PtrToStringAuto(Marshal.SecureStringToBSTR(t)))
End Sub
Public Sub TestReadonlyCollection()
Dim t As New ReadOnlyCollection(Of String)(New String() {"A", "B", "C"})
For i As Integer = 0 To t.Count - 1
Console.Write(t.Item(i))
Next
Console.WriteLine()
Dim h As New LzmTW.uSystem.uReflection.TypeHelper(t)
Dim mNowList As New List(Of String)
mNowList.AddRange(New String() {"A", "B", "C", "D"})
h.SetMemberValue("list", mNowList)
For i As Integer = 0 To t.Count - 1
Console.Write(t.Item(i))
Next
End Sub
End Class
TypeHelp类
- .NET的变量在代码集中是不安全的
- volatile变量的运算在并发下一样是不安全的
- 类的静态变量是线程不安全的
- Get是不安全的
- 1.6 不安全的代码
- SAFESEH 映像是不安全的
- 代码验证java的StringBuffer是线程安全而StringBuilder是线程不安全的
- memcpy 自身copy是不安全的
- HashMap为什么是线程不安全的?
- Servlet为什么是线程不安全的?
- HashMap为什么是线程不安全的?
- 模块对于 safeseh 映像是不安全的
- HashMap为什么是线程不安全的?
- HashMap为什么是线程不安全的?
- HashMap为什么是线程不安全的?
- 证明HashMap是线程不安全的
- 为什么说ArrayList是线程不安全的?
- 模块对于 SAFESEH 映像是不安全的。
- 识时务者 藏头诗(原创) 强力打造 倾力推出
- age of conan
- autorun.exe
- Linux的压缩打包方式之tar命令
- SQL Server 2005 累积修补程序包(版本 2153)已推出
- .NET的变量在代码集中是不安全的
- AD服务器的架设
- VC学习一日一练(2)---MFC中自定义消息
- dnn skin -- beauty
- VS2005中将GridView 中的数据导出至excel
- Google Mulls Bid for Wireless Spectrum (NewsFactor)
- The query processor ran out of internal resources and could not produce a query plan. This is a rare event and only expected for
- 还是Android
- autoupdate.exe