小编Ven*_*emo的帖子

这个新的ASP.NET安全漏洞有多严重,我该如何解决它?

我刚刚在网上看到了ASP.NET中新发现的安全漏洞.你可以在这里阅读详细信息.

问题在于ASP.NET实现AES加密算法的方式,以保护这些应用程序生成的cookie的完整性,以便在用户会话期间存储信息.

这有点模糊,但这里有一个更令人恐惧的部分:

攻击的第一阶段需要几千个请求,但一旦成功并且攻击者获得了密钥,它就完全是隐秘的.所需的加密知识是非常基本的.

总而言之,我对安全性/密码学不够熟悉,但要知道这是否真的那么严重.

那么,是否所有ASP.NET开发人员都担心这种技术可以在几秒钟内拥有任何ASP.NET网站或者什么?

这个问题如何影响普通的ASP.NET开发人员?它会影响我们吗?在现实生活中,这个漏洞的后果是什么?最后:是否有一些可以防止此漏洞的解决方法?

谢谢你的回答!


编辑:让我总结一下我得到的答复

所以,这基本上是一种"填充oracle"类型的攻击.@Sri提供了一个很好的解释,说明这种类型的攻击是什么意思.这是一个关于这个问题的令人震惊的视频!

关于此漏洞的严重性:是的,它确实很严重.它允许攻击者了解应用程序的机器密钥.因此,他可以做一些非常不需要的事情.

  • 在应用程序的机器密钥的位置,攻击者可以解密身份验证cookie.
  • 更糟糕的是,他可以使用任何用户的名称生成身份验证cookie.因此,他可以像网站上的任何人一样出现.应用程序无法区分您或为您自己生成身份验证cookie的黑客.
  • 它还允许他解密(并生成)会话cookie,尽管这不像前一个那样危险.
  • 不那么严重:他可以解密加密的ViewState页面.(如果您使用ViewState存储确信数据,则不应该这样做!)
  • 非常意外:凭借对机器密钥的了解,攻击者可以从您的Web应用程序下载任意文件,即使是那些通常无法下载的文件!(包括Web.Config等)

以下是一些我没有解决问题的良好实践,但有助于提高Web应用程序的一般安全性.

现在,让我们关注这个问题.

解决方案

  • 启用customErrors并创建一个错误页面,重定向所有错误.是的,甚至404s.(ScottGu说,区分404s和500s对于这次攻击至关重要.)另外,进入你的Application_Error或者Error.aspx放一些随机延迟的代码.(生成一个随机数,并使用Thread.Sleep长时间休眠.)这将使攻击者无法确定您的服务器上究竟发生了什么.
  • 有些人建议切换回3DES.理论上,如果您不使用AES,则不会遇到AES实现中的安全漏洞.事实证明,根本不建议这样做.

其他一些想法

感谢所有回答我问题的人.我不仅了解了这个问题,还了解了网络安全性.我将@ Mikael的答案标记为已被接受,但其他答案也非常有用.

.net asp.net security padding-oracle-attack

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

与C++中的普通指针相比,智能指针的开销是多少?

与C++ 11中的普通指针相比,智能指针的开销是多少?换句话说,如果我使用智能指针,我的代码会变慢吗?如果是这样,速度会慢多少?

具体来说,我问的是C++ 11 std::shared_ptrstd::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)

c++ performance smart-pointers c++11

88
推荐指数
5
解决办法
3万
查看次数

在CSS中处理像素是不是很糟糕?

在CSS中使用像素数而不是百分比的兼容性方面是不是很糟糕?降低分辨率怎么样?可以在1-100的范围内使用它们吗?

css pixels screen-resolution resolution-independence

81
推荐指数
4
解决办法
6745
查看次数

Node.js有一个很好的索引/搜索引擎吗?

我正在为一个node.js应用程序寻找一个好的开源(使用LGPL或许可许可证)索引引擎,就像Lucene一样.我正在寻找进程内索引和搜索,并且对索引像Sphinx或Solr这样的服务器不感兴趣.

我不害怕为C/C++库创建绑定,所以我也对这些建议持开放态度.

到目前为止我发现了

  • node-clucene似乎不再被积极维护(并且有几个未解决的问题)
  • 我可以为CLucene创建自己的绑定,但它似乎很少维护,它的当前版本也远远落后于Java Lucene
  • Apache Lucy似乎是为了为动态语言创建绑定而设计的,但到目前为止他们没有节点绑定(也没有C API),我还没有找到任何关于创建绑定的文档.我也没有找到任何有关其性能的基准.
  • 节点搜索似乎被放弃了
  • jsii似乎仍然是原型,也被放弃了
  • 全面防护,仅用于在网络浏览器中运行
  • lunr.js似乎只允许序列化整个索引,所以不可扩展

我可以"自己滚动",但我更喜欢使用现有的解决方案.

编辑:为什么我对独立的索引服务器不感兴趣:我使用快速的进程内键值存储数据库,因此不得不离开进程进行查询.

javascript lucene indexing search-engine node.js

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

DDD和MVC:'模型'和'实体'之间的区别

我对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)

这两个例子都没有做我上面描述的内容.我很丢失.有什么输入?

php model-view-controller entity domain-driven-design model

53
推荐指数
3
解决办法
2万
查看次数

打包结构是否可移植?

我在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上运行.)
  • 其他编译器是否支持具有相同内存布局的打包结构?用什么语法?

编辑:

  • 是的,我知道打包的结构是非标准的,但它们看起来很有用,可以考虑使用它们.
  • 我对C和C++都感兴趣,虽然我不认为GCC会以不同的方式处理它们.
  • 这些结构不是继承的,不会继承任何东西.
  • 这些结构只包含固定大小的整数字段和其他类似的打包结构.(我之前被浮子烧了......)

c c++ gcc struct packed

40
推荐指数
4
解决办法
5524
查看次数

Qt:槽返回值的含义?

根据文档,插槽的返回值并不意味着什么.
然而在生成的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)

c++ qt signals-slots

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

公开类所拥有资源的正确方法是什么?

假设我有一个有Document类的库.的一个实例Document可以拥有的几个实例Field.Field有多个子类(例如IntegerFieldStringField),甚至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建议的替代方法的建议.)

c++ ownership unique-ptr c++11

20
推荐指数
2
解决办法
1259
查看次数

我的课程名称应该以Qt中的'Q'开头吗?

当我第一次开始使用Qt时,每个班级的名字都以"Q"开头是非常烦人的,但现在我已经习惯了.

我正在使用Qt Creator,它很好地突出了代码.
但是,它只突出显示以"Q"开头的类名.它突出了以'Q'开头的一切,即使没有这种类型.
它不会突出显示自定义类名.

这让我想知道,我是否也应该用'Q'开始我的所有课程名称?
或者至少是可重复使用的?
(我的意思是,我放在类库中,或在其他应用程序中重用.)

我见过几个地方,他们用这种方式命名他们的课程.这是好事吗?

我找到了关于Qt命名约定的这个页面,但它没有解决这个问题.

另外,我不明白为什么Qt不使用命名空间.

编辑:

非常感谢与我分享他的想法的每个人.

编辑2:

似乎较新版本的Qt Creator现在也突出了不以'Q'开头的类名.太好了!

c++ qt qt4 qt-creator

16
推荐指数
4
解决办法
2207
查看次数

如何在ASP.NET MVC中创建CheckBoxListFor扩展方法?

我知道ListBoxForASP.NET MVC Html助手扩展方法中有一个扩展方法,但我一直认为复选框列表比列表框更加用户友好.

CheckBoxList在旧的WebForms中有一个非常方便的控制,但显然现在已经不在了.

问题是,为什么ASP.NET MVC中没有办法创建复选框列表?如何编写自己的扩展方法来创建复选框列表并以类似的方式运行ListBoxFor

.net asp.net asp.net-mvc checkboxlist

15
推荐指数
1
解决办法
3万
查看次数