我刚刚在网上看到了ASP.NET中新发现的安全漏洞.你可以在这里阅读详细信息.
问题在于ASP.NET实现AES加密算法的方式,以保护这些应用程序生成的cookie的完整性,以便在用户会话期间存储信息.
这有点模糊,但这里有一个更令人恐惧的部分:
攻击的第一阶段需要几千个请求,但一旦成功并且攻击者获得了密钥,它就完全是隐秘的.所需的加密知识是非常基本的.
总而言之,我对安全性/密码学不够熟悉,但要知道这是否真的那么严重.
那么,是否所有ASP.NET开发人员都担心这种技术可以在几秒钟内拥有任何ASP.NET网站或者什么?
这个问题如何影响普通的ASP.NET开发人员?它会影响我们吗?在现实生活中,这个漏洞的后果是什么?最后:是否有一些可以防止此漏洞的解决方法?
谢谢你的回答!
所以,这基本上是一种"填充oracle"类型的攻击.@Sri提供了一个很好的解释,说明这种类型的攻击是什么意思.这是一个关于这个问题的令人震惊的视频!
关于此漏洞的严重性:是的,它确实很严重.它允许攻击者了解应用程序的机器密钥.因此,他可以做一些非常不需要的事情.
以下是一些我没有解决问题的良好实践,但有助于提高Web应用程序的一般安全性.
现在,让我们关注这个问题.
解决方案
Application_Error
或者Error.aspx
放一些随机延迟的代码.(生成一个随机数,并使用Thread.Sleep长时间休眠.)这将使攻击者无法确定您的服务器上究竟发生了什么.其他一些想法
感谢所有回答我问题的人.我不仅了解了这个问题,还了解了网络安全性.我将@ Mikael的答案标记为已被接受,但其他答案也非常有用.
与C++ 11中的普通指针相比,智能指针的开销是多少?换句话说,如果我使用智能指针,我的代码会变慢吗?如果是这样,速度会慢多少?
具体来说,我问的是C++ 11 std::shared_ptr
和std::unique_ptr
.
显然,推下堆栈的东西会变得更大(至少我认为是这样),因为智能指针也需要存储其内部状态(引用计数等),问题是,这是多少影响我的表现,如果有的话?
例如,我从函数而不是普通指针返回一个智能指针:
std::shared_ptr<const Value> getValue();
// versus
const Value *getValue();
Run Code Online (Sandbox Code Playgroud)
或者,例如,当我的一个函数接受智能指针作为参数而不是普通指针时:
void setValue(std::shared_ptr<const Value> val);
// versus
void setValue(const Value *val);
Run Code Online (Sandbox Code Playgroud) 在CSS中使用像素数而不是百分比的兼容性方面是不是很糟糕?降低分辨率怎么样?可以在1-100的范围内使用它们吗?
我正在为一个node.js应用程序寻找一个好的开源(使用LGPL或许可许可证)索引引擎,就像Lucene一样.我正在寻找进程内索引和搜索,并且对索引像Sphinx或Solr这样的服务器不感兴趣.
我不害怕为C/C++库创建绑定,所以我也对这些建议持开放态度.
到目前为止我发现了
我可以"自己滚动",但我更喜欢使用现有的解决方案.
编辑:为什么我对独立的索引服务器不感兴趣:我使用快速的进程内键值存储数据库,因此不得不离开进程进行查询.
我对MVC中"模型"的概念感到非常困惑.今天存在的大多数框架将模型放在Controller和数据库之间,而模型几乎就像数据库抽象层.随着Controller开始做越来越多的逻辑,'Fat Model Skinny Controller'的概念就丢失了.
在DDD中,还有域实体的概念,它具有唯一的身份.据我了解,用户是实体的一个很好的例子(例如,唯一的用户ID).实体有一个生命周期 - 它的值可以在整个动作过程中改变 - 然后它被保存或丢弃.
我上面描述的实体是我认为模型应该在MVC中的内容?我有多偏离基础?
为了使事情更加混乱,你会引入其他模式,例如Repository模式(可能会在其中放置一个Service).很清楚Repository如何与实体交互 - 它与模型有什么关系?
控制器可以有多个模型,这使得模型看起来像一个"数据库表"而不是一个独特的实体.
更新: 在这篇文章中,模型被描述为具有知识的东西,它可以是单数或对象的集合.所以听起来更像是一个实体,一个模型或多或少都是一样的.模型是一个包罗万象的术语,其中实体更具体.值对象也是一个模型.至少在MVC方面.也许???
所以,从非常粗略的角度来看,哪个更好?
没有"模特"真的......
class MyController {
public function index() {
$repo = new PostRepository();
$posts = $repo->findAllByDateRange('within 30 days');
foreach($posts as $post) {
echo $post->Author;
}
}
}
Run Code Online (Sandbox Code Playgroud)
或者这个,它有一个模型作为DAO?
class MyController {
public function index() {
$model = new PostModel();
// maybe this returns a PostRepository?
$posts = $model->findAllByDateRange('within 30 days');
while($posts->getNext()) {
echo $posts->Post->Author;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这两个例子都没有做我上面描述的内容.我很丢失.有什么输入?
我在Cortex-M4微控制器上有一些代码,并希望使用二进制协议与PC通信.目前,我正在使用具有GCC特定packed
属性的压缩结构.
这是一个粗略的轮廓:
struct Sensor1Telemetry {
int16_t temperature;
uint32_t timestamp;
uint16_t voltageMv;
// etc...
} __attribute__((__packed__));
struct TelemetryPacket {
Sensor1Telemetry tele1;
Sensor2Telemetry tele2;
// etc...
} __attribute__((__packed__));
Run Code Online (Sandbox Code Playgroud)
我的问题是:
TelemetryPacket
对MCU和客户端应用程序上的结构使用完全相同的定义,上述代码是否可以跨多个平台移植?(我对x86和x86_64很感兴趣,需要它在Windows,Linux和OS X上运行.)编辑:
根据文档,插槽的返回值并不意味着什么.
然而在生成的moc代码中,我看到如果一个槽返回一个值,则该值用于某些东西.知道它做了什么?
这是我正在谈论的一个例子.这是从moc生成的代码中获取的.'message'是一个不返回任何内容的插槽,'selectPart'被声明为返回int.
case 7: message((*reinterpret_cast< const QString(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2]))); break;
case 8: { int _r = selectPart((*reinterpret_cast< AppObject*(*)>(_a[1])),(*reinterpret_cast< int(*)>(_a[2])));
if (_a[0]) *reinterpret_cast< int*>(_a[0]) = _r; } break;
Run Code Online (Sandbox Code Playgroud) 假设我有一个有Document
类的库.的一个实例Document
可以拥有的几个实例Field
.Field
有多个子类(例如IntegerField
和StringField
),甚至API用户也可以将它子类化并提供子类实例Document
(假设用户可以开发一个自定义类型的数据来存储在一个字段中).
我希望通过API 公开所Field
拥有的实例Document
,以便用户可以与它们进行交互,但不会转移所有权.
这样做的正确方法是什么?
我想过:
const std::unique_ptr<Field>&
参考 - 这感觉非常难看Field*
指针 - 这感觉不对,因为用户可能不确定他是否应该删除实例std::shared_ptr
相反使用- 这感觉很糟糕,因为所有权并非真正共享例如,
class Document {
private:
std::map<std::string, std::unique_ptr<Field> > fields;
// ...
public:
// ...
// How is this done properly?
const std::unique_ptr<Field> &field(const std::string &name) {
return fields[name];
}
}
Run Code Online (Sandbox Code Playgroud)
我期待着你的建议.
(我也欢迎有关@Fulvio建议的替代方法的建议.)
当我第一次开始使用Qt时,每个班级的名字都以"Q"开头是非常烦人的,但现在我已经习惯了.
我正在使用Qt Creator,它很好地突出了代码.
但是,它只突出显示以"Q"开头的类名.它突出了以'Q'开头的一切,即使没有这种类型.
它不会突出显示自定义类名.
这让我想知道,我是否也应该用'Q'开始我的所有课程名称?
或者至少是可重复使用的?
(我的意思是,我放在类库中,或在其他应用程序中重用.)
我见过几个地方,他们用这种方式命名他们的课程.这是好事吗?
我找到了关于Qt命名约定的这个页面,但它没有解决这个问题.
另外,我不明白为什么Qt不使用命名空间.
编辑:
非常感谢与我分享他的想法的每个人.
编辑2:
似乎较新版本的Qt Creator现在也突出了不以'Q'开头的类名.太好了!
我知道ListBoxFor
ASP.NET MVC Html助手扩展方法中有一个扩展方法,但我一直认为复选框列表比列表框更加用户友好.
CheckBoxList
在旧的WebForms中有一个非常方便的控制,但显然现在已经不在了.
问题是,为什么ASP.NET MVC中没有办法创建复选框列表?如何编写自己的扩展方法来创建复选框列表并以类似的方式运行ListBoxFor
?
c++ ×5
.net ×2
asp.net ×2
c++11 ×2
qt ×2
asp.net-mvc ×1
c ×1
checkboxlist ×1
css ×1
entity ×1
gcc ×1
indexing ×1
javascript ×1
lucene ×1
model ×1
node.js ×1
ownership ×1
packed ×1
performance ×1
php ×1
pixels ×1
qt-creator ×1
qt4 ×1
security ×1
struct ×1
unique-ptr ×1