问题列表 - 第27565页

如何避免开放重定向漏洞并成功登录时安全重定向(提示:ASP.NET MVC 2默认代码易受攻击)

通常,当某个站点要求您在访问某个页面之前已登录时,您将进入登录屏幕,并在成功验证自己后,您将被重定向回最初请求的页面.这对于可用性非常有用 - 但是如果不仔细审查,此功能很容易成为一个开放的重定向漏洞.

遗憾的是,对于此漏洞的一个示例,只看ASP.NET MVC 2提供的默认LogOn操作:

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid) {
        if (MembershipService.ValidateUser(model.UserName, model.Password)) {
            FormsService.SignIn(model.UserName, model.RememberMe);

            if (!String.IsNullOrEmpty(returnUrl)) {
                return Redirect(returnUrl); // open redirect vulnerability HERE
            } else {
                return RedirectToAction("Index", "Home");
            }

        } else {
            ModelState.AddModelError("", "User name or password incorrect...");
        }
    }

    return View(model);
}
Run Code Online (Sandbox Code Playgroud)

如果用户成功通过身份验证,则会将其重定向到"returnUrl"(如果通过登录表单提交提供).

以下是利用此漏洞的简单示例攻击(实际上是众多攻击之一):

  1. 假装成受害者银行的攻击者向受害者发送包含链接的电子邮件,如下所示: http://www.mybank.com/logon?returnUrl=http://www.badsite.com
  2. 在被教导验证整个域名(例如,google.com = GOOD,google.com.as31x.example.com = BAD)后,受害者知道链接是正常的 - 没有任何棘手的子域网络钓鱼行为上.
  3. 受害者点击链接,看到他们实际熟悉的银行网站并被要求登录
  4. 受害者登录并随后被重定向到http://www.badsite.com看起来与受害者银行的网站完全相同,因此受害者不知道他现在在不同的网站上.
  5. http://www.badsite.com 说"我们需要更新我们的记录 - 请在下面输入一些非常个人的信息:[ssn],[地址],[电话号码]等."
  6. 受害者,仍然认为他在他的银行网站,堕落的策略,并为攻击者提供信息

有关如何维护此重定向成功登录功能的任何想法,但避免了开放重定向漏洞?

我倾向于将"returnUrl"参数拆分为控制器/动作部分并使用"RedirectToRouteResult"而不是简单地"重定向".这种方法是否会打开任何新的漏洞? …

security authentication asp.net-mvc redirect

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

将对象作为接口传递

这应该是一个简单的答案,我相信它将是一个不,
但从一个更大的项目,我有一个接口和程序

iMyUnknown= interface(IInterface)
 ['..GUID..']
end;
procedure WorkObject(iObj :iMyUnknown);
Run Code Online (Sandbox Code Playgroud)

我知道这很有效

var 
  MyUnknown : iMyUnknown;
begin
 if supports(obj, iMyUnknown, MyUnknown) then
  WorkObject(MyUnknown);
Run Code Online (Sandbox Code Playgroud)

但有可能做这样的事情吗?

if supports(obj, iMyUnknown) then
  WorkObject(obj as iMyUnknown);
Run Code Online (Sandbox Code Playgroud)

delphi interface delphi-7

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

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

常数由另一个名称

首先,我已经看到了这个问题并理解为什么以下代码不起作用.那不是我的问题.

我有一个常数,它被宣布为;

//Constants.h
extern NSString * const MyConstant;

//Constants.m
NSString * const MyConstant = @"MyConstant";
Run Code Online (Sandbox Code Playgroud)

但是,在某些情况下,让常量具有更具描述性的名称更有用MyReallySpecificConstant.我希望这样做:

//SpecificConstants.h
extern NSString * const MyReallySpecificConstant;

//SpecificConstants.m
#import "Constants.h"
NSString * const MyReallySpecificConstant = MyConstant;
Run Code Online (Sandbox Code Playgroud)

显然我不能这样做(这在上面的链接问题中有解释).

我的问题是:

如何(除了类似的东西#define MyReallySpecificConstant MyConstant)我可以在多个名称下提供一个常量?

c constants objective-c

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

我应该使用什么Java CMIS客户端库?

我正在开始一个新项目,必须决定我们将使用哪个CMIS客户端库.
我们的Java项目只需要连接一个CMIS服务器(实际上是Alfresco,但它无关紧要),以便执行一些读/写/搜索操作.

我正在寻找一个客户端库:

  • 已经可以使用了
  • 不会很快被抛弃
  • 拥有活跃的用户社区
  • 是开源的

你会推荐哪一个?为什么?

以下是一些可能性:

  • Apache Chemistry的OpenCMIS(现在获胜)
  • xCMIS
  • 化学-atompub-client(废弃)
  • 化学 - 阿布德拉(不是非常活跃)
  • 阿布德拉(难)
  • 直接使用AtomPub或Web服务(困难)

alfresco cmis

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

双击并选择Terminal.app中的路径(包括'/')

我在Mac OS10.6.3上使用Terminal.app,带有gnu屏幕和zsh.

我想要做的是,pwd在Terminal.app中查看(或URL)并双击它,然后选择整个路径,然后复制并粘贴.

但我现在得到的是一个目录名,因为'/'不被视为单词.我发现iTerm有一个设置来改变它(iTerm - >首选项 - >鼠标 - >字符被认为是一个单词的一部分),但有什么方法可以在我的环境中做到这一点?

macos terminal

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

奇怪的C++性能(VC 2010)

我有用C++编写的这个循环,用MSVC2010编译需要很长时间才能运行.(300毫秒)

    for (int i=0; i<h; i++) {
    for (int j=0; j<w; j++) {
        if (buf[i*w+j] > 0) {
            const int sy = max(0, i - hr);
            const int ey = min(h, i + hr + 1);
            const int sx = max(0, j - hr);
            const int ex = min(w, j + hr + 1);
            float val = 0;
            for (int k=sy; k < ey; k++) {
                for (int m=sx; m < ex; m++) {
                    val += original[k*w + m] * …
Run Code Online (Sandbox Code Playgroud)

c++ performance assembly

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

成为MySQL专家的最快方式?

我多年来一直在使用MySQL,主要是在去年左右的小型项目上.我不确定这是语言的本质还是我缺乏真正的教程让我感到不确定我写的是否是用于优化目的和缩放目的的正确方法.

虽然我在PHP中自学,但我非常确定自己和我编写的代码,很容易将它与其他人比较等等.

使用MySQL,我不确定是否应该(以及在什么情况下)使用INNER JOIN或LEFT JOIN,我也不知道它具有大量的功能.虽然我已经为处理了数千万条记录的数据库编写了代码,但我不知道它是否是最佳的.我经常发现一个小的调整会使查询的时间少于原始时间的1/10 ......但我怎么知道我当前的查询也不慢?

我希望在这个领域对优化数据库和可扩展的能力充满信心.使用不是问题 - 我每天都会以多种不同的方式使用它.

所以,问题是,路径是什么?读书?网站/教程?建议?

mysql sql

12
推荐指数
2
解决办法
8132
查看次数

有人可以解释这个Objective C方法声明语法

我正在研究iPhone开发书*而不是真正了解目标C.在大多数情况下,我能够跟踪正在发生的事情,但是有一些方法声明,如下面的那个,我有点麻烦解析.例如:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger) section {
  return [self.controllers count]; //controllers is an instance variable of type NSArray in this class
}
Run Code Online (Sandbox Code Playgroud)

它看起来这是一个名为numberOfRowsInSection的方法,它返回一个NSInteger,并将NSInteger作为一个本地称为"section"的参数.但是我不理解对tableView的所有引用,或者为什么在方法中没有使用它时需要参数.有人可以澄清一下吗?谢谢.

*P.258,由Mark和LaMarche开始的iPhone 3开发,由Apress出版

更新:我能够找到另一个更详细的SO线程: Objective C中的方法语法

objective-c

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

如何在SQL查询中分解出重复的表达式?列别名似乎不是故障单

所以,我有一个看起来像这样的查询:

SELECT id, 
    DATE_FORMAT(CONVERT_TZ(callTime,'+0:00','-7:00'),'%b %d %Y') as callDate, 
    DATE_FORMAT(CONVERT_TZ(callTime,'+0:00','-7:00'),'%H:%i') as callTimeOfDay, 
    SEC_TO_TIME(callLength) as callLength
FROM cs_calldata WHERE 
    customerCode='999999-abc-blahblahblah' AND 
    CONVERT_TZ(callTime,'+0:00','-7:00') >= '2010-04-25' AND
    CONVERT_TZ(callTime,'+0:00','-7:00') <= '2010-05-25'
Run Code Online (Sandbox Code Playgroud)

如果你像我一样,你可能会开始认为,如果我没有要求它计算CONVERT_TZ(callTime,'+0:00','-7:00')四次单独的时间,它可能会提高可读性和可能的​​查询性能.

所以我尝试为该表达式创建一个列别名,并用该别名替换进一步的出现:

SELECT id, 
    CONVERT_TZ(callTime,'+0:00','-7:00') as callTimeZoned,
    DATE_FORMAT(callTimeZoned,'%b %d %Y') as callDate, 
    DATE_FORMAT(callTimeZoned,'%H:%i') as callTimeOfDay, 
    SEC_TO_TIME(callLength) as callLength
FROM cs_calldata WHERE 
    customerCode='5999999-abc-blahblahblah' AND 
    callTimeZoned >= '2010-04-25' AND
    callTimeZoned <= '2010-05-25'
Run Code Online (Sandbox Code Playgroud)

这是我学习的时候,引用MySQL手册:

标准SQL不允许在WHERE子句中引用列别名.强制执行此限制是因为在评估WHERE子句时,可能尚未确定列值.

所以,这种方法似乎已经死了.

如何用这样的重复表达式编写查询来处理它?

sql select expression column-alias

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