小编Ste*_*ies的帖子

SecureString在C#应用程序中是否实用?

如果我的假设在这里错了,请随意纠正我,但让我解释一下我为什么要问.

摘自MSDN,a SecureString:

代表应保密的文本.文本在使用时加密以保护隐私,并在不再需要时从计算机内存中删除.

我明白了,将密码或其他私人信息存储在a中是完全合理SecureStringSystem.String,因为你可以控制它实际存储在内存中的方式和时间,因为System.String:

是不可变的,当不再需要时,不能以编程方式安排垃圾收集; 也就是说,实例在创建后是只读的,并且无法预测实例何时从计算机内存中删除.因此,如果String对象包含敏感信息(如密码,信用卡号或个人数据),则使用该信息后可能会显示该信息,因为您的应用程序无法从计算机内存中删除该数据.

但是,在GUI应用程序(例如,ssh客户端)的SecureString 情况下,必须从a构建 System.String.所有文本控件都使用字符串作为其基础数据类型.

因此,这意味着每次用户按下某个键时,就会丢弃那里的旧字符串,并构建一个新字符串来表示文本框内的值,即使使用密码掩码.并且我们无法控制何时或是否从内存中丢弃任何这些值.

现在是时候登录服务器了.你猜怎么着?您需要在连接上传递一个字符串以进行身份​​验证.所以让我们将我们SecureString转换为System.String....现在我们在堆上有一个字符串,无法强制它通过垃圾收集(或将0写入其缓冲区).

我的观点是:无论你做什么,沿线某处,那SecureString被转换成一个System.String,这意味着它至少会在某些点上堆存在(没有垃圾收集的任何保证).

我的观点不是:是否存在绕过将字符串发送到ssh连接或绕过控件存储字符串(制作自定义控件)的方法.对于这个问题,您可以将"ssh connection"替换为"登录表单","注册表单","付款表单","食物 - 你愿意喂你的小狗但不是你孩子的表格",等等

  • 那么,在什么时候使用SecureString实际变得实用?
  • 是否值得花费额外的开发时间来彻底根除System.String对象的使用?
  • 完全重点是SecureString减少System.String堆上的时间(降低转移到物理交换文件的风险)?
  • 如果攻击者已经拥有进行堆检查的手段,那么他很可能(A)已经有了读取击键的方法,或者(B)已经在物理上拥有该机器 ...所以会使用a SecureString阻止他进入数据呢?
  • 这只是"通过默默无闻的安全"吗?

对不起,如果我把问题放得太厚,好奇心就好了.随意回答我的任何或所有问题(或告诉我,我的假设是完全错误的).:)

c# security

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

你如何在 JavaScript 中以 10 以外的基数取整一个数字?

例如,假设我有一个12.24以 8 为基数(10.3125以 10 为基数)的数字,我想将该数字四舍五入到 1 个精度点,以便得到12.3.

javascript base rounding

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

java.library.path 默认设置为多少?

我只是想知道 Java 到底是如何决定其java.library.path属性的默认值的?

我正在运行 *buntu 14.04 64 位,它默认为(前两个不存在):

/usr/java/packages/lib/amd64
/usr
/lib64 /lib64
/lib
/usr/lib

搜索我的环境变量,发现里面没有这些设置LD_LIBRARY_PATH确实将其内容添加到此列表中。

鉴于此信息,我假设此列表只是显式设置(硬编码)到 Java 中,但我找不到任何有关它的文档。我的假设正确吗?不同操作系统的默认值是多少?这些值会随着发行版的不同而变化吗?

我问有两个原因。1)我只是好奇。2)我想知道我可以把一个库放在哪里,以便Java总能找到它。

java

6
推荐指数
1
解决办法
9277
查看次数

C#程序正在寻找sql server compact 3.5,但我使用的是4.0

好吧,这个让我很困惑,如果问题的标题不能准确描述我的问题,我会道歉.

我有一个用C#编写的程序,使用Entity Framework和SQL Server CE.我在Windows 7上开发它,它工作正常.我也有一台Windows 8.1机器,我已经测试过它,它也可以正常工作.

但是,在一些Windows 8.1计算机上,程序一旦尝试访问数据库就会崩溃.我收到以下错误:

未处理的异常:System.InvalidOperationException:找不到具有不变名称"System.Data.SqlServerCe.3.5"的ADO.NET提供程序的实体框架提供程序.确保提供程序已在应用程序配置文件的"entityFramework"部分中注册.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882.

现在,这真让我感到困惑,因为我在我的项目中安装了最新的SQL Server CE NuGet包(4.0).我使用SQL Server CE工具箱显式创建SQL Server CE 4.0数据库,我使用应用程序分发了4.0 dll,并且我明确地在my app.configfile(invariantName="System.Data.SqlServerCe.4.0")中列出了4.0版本.

那么,为什么错误说呢System.Data.SqlServerCe.3.5?为什么此错误仅发生在几台Windows 8.1计算机上?

(我还搜索了我的整个解决方案,文本"3.5"甚至没有出现在任何地方.)

我发现了类似的错误,我尝试(从 这个问题)包括这个:

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
Run Code Online (Sandbox Code Playgroud)

没有效果,我仍然得到同样的答案.

无论如何,如果有人有任何想法,我会非常感谢任何形式的投入.

c# sql-server-ce-4 sql-server-ce-3.5

5
推荐指数
2
解决办法
1596
查看次数

Ruby NoMethodError:[]:Array的未定义方法`messages'

由于谷歌没有帮助我解决这个问题,我想我会分享给其他遇到这个问题的人:

在尝试保存模型时,我明白了

NoMethodError: undefined method `messages' for []:Array
0: /.../active_record/autosave_association.rb:491:in `_ensure_no_duplicate_errors'
1: /.../active_support/callbacks.rb:413:in `block in make_lambda'
2: /.../active_support/callbacks.rb:246:in `block in halting'
3: /.../active_support/callbacks.rb:511:in `block in invoke_after'
4: /.../active_support/callbacks.rb:511:in `each'
5: /.../active_support/callbacks.rb:511:in `invoke_after'
6: /.../active_support/callbacks.rb:132:in `run_callbacks'
7: /.../active_support/callbacks.rb:825:in `_run_validation_callbacks'
8: /.../active_model/validations/callbacks.rb:110:in `run_validations!'
9: /.../active_model/validations.rb:335:in `valid?'
Run Code Online (Sandbox Code Playgroud)

示例型号:

class Foo < ActiveRecord::Base

  def do_stuff
    @errors = []
    @errors << 'Bad stuff' if self.bar > 4
    @errors
  end

end
Run Code Online (Sandbox Code Playgroud)

示例代码:

foo = Foo.first
foo.do_stuff
foo.save # or foo.valid?, etc.
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails rails-activerecord

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

如何在 rails (postgres) 查询中参数化日期范围?

就像标题所问的那样,如何在查询中包含日期范围?

例如,假设我有一个名为的模型VisitToGrandma,它有一个名为visit_date. 现在,我想找到上个月发生的所有对祖母的访问。

这是我正在尝试的:

VisitToGrandma.where("? @> visit_date", (1.month.ago..Time.now))
Run Code Online (Sandbox Code Playgroud)

但是,这会产生查询:

SELECT "visits_to_grandmas".* FROM "visits_to_grandmas" WHERE ('2018-07-01','2018-07-02','2018-07-03','2018-07-04','2018-07-05 ','2018-07-06','2018-07-07','2018-07-08','2018-07-09','2018-07-10','2018-07-11', '2018-07-12'、'2018-07-13'、'2018-07-14'、'2018-07-15'、'2018-07-16'、'2018-07-17'、'2018 -07-18','2018-07-19','2018-07-20','2018-07-21','2018-07-22','2018-07-23','2018-07 -24'、'2018-07-25'、'2018-07-26'、'2018-07-27'、'2018-07-28'、'2018-07-29'、'2018-07-30 ','2018-07-31','2018-08-01'@>visit_date)

参数化这个的正确方法是什么?

是的,我知道对于这个虚构的例子,我可以只使用开始和结束日期并使用BETWEEN或其他一些运算符来执行此操作,而无需使用实际日期范围,但这不是我要问的。

编辑以指出这个问题与另一个问题的不同之处:

这个问题只是关于在一个范围内找到一个日期,我的问题是询问如何实际参数化一个范围对象,以便可以使用所有 postgresql 的日期范围运算符。

postgresql ruby-on-rails rails-activerecord ruby-on-rails-5

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

如何升级到C#5?

这似乎应该很容易,但在网上搜索没有发现任何东西.我想利用C#的异步并等待,但我有C#版本4.0.30319(我从中得到Console.Write(typeof(string).Assembly.ImageRuntimeVersion);).

我刚刚从VS12升级到VS13,我使用的是.NET 4.5.我以为我的C#版本也会升级,但它没有(异步和等待仍会出错).

有任何想法吗?

.net c# visual-studio-2013

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