如果我的假设在这里错了,请随意纠正我,但让我解释一下我为什么要问.
摘自MSDN,a SecureString:
代表应保密的文本.文本在使用时加密以保护隐私,并在不再需要时从计算机内存中删除.
我明白了,将密码或其他私人信息存储在a中是完全合理SecureString的System.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堆上的时间(降低转移到物理交换文件的风险)?SecureString阻止他进入数据呢?对不起,如果我把问题放得太厚,好奇心就好了.随意回答我的任何或所有问题(或告诉我,我的假设是完全错误的).:)
例如,假设我有一个12.24以 8 为基数(10.3125以 10 为基数)的数字,我想将该数字四舍五入到 1 个精度点,以便得到12.3.
我只是想知道 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总能找到它。
好吧,这个让我很困惑,如果问题的标题不能准确描述我的问题,我会道歉.
我有一个用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)
没有效果,我仍然得到同样的答案.
无论如何,如果有人有任何想法,我会非常感谢任何形式的投入.
由于谷歌没有帮助我解决这个问题,我想我会分享给其他遇到这个问题的人:
在尝试保存模型时,我明白了
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) 就像标题所问的那样,如何在查询中包含日期范围?
例如,假设我有一个名为的模型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 的日期范围运算符。
这似乎应该很容易,但在网上搜索没有发现任何东西.我想利用C#的异步并等待,但我有C#版本4.0.30319(我从中得到Console.Write(typeof(string).Assembly.ImageRuntimeVersion);).
我刚刚从VS12升级到VS13,我使用的是.NET 4.5.我以为我的C#版本也会升级,但它没有(异步和等待仍会出错).
有任何想法吗?