小编Adr*_*zar的帖子

如何验证Web服务调用的来源

假设您有一个移动应用程序(Windows Phone或Android),它使用SOAP连接您的后端.

为了方便起见,我们假设我们有一个用C#实现的Web服务.服务器公开以下方法:

[WebMethod]
public string SayHallo() { return "Hallo Client"; }
Run Code Online (Sandbox Code Playgroud)

从服务器的角度来看,您无法判断调用者是您的移动应用程序还是尝试调试Web服务的开发人员或试图反向工程/利用您的后端的黑客.

如何识别Web服务调用的来源是应用程序?任何拥有WSDL的人都可以调用WS.

我知道我可以对Web服务实施一些标准的安全措施,例如:

  • 在服务器上实施HTTPS,使邮件加密,减少窃听的危险.
  • 使用摘要/散列算法在客户端对请求进行签名,验证服务器中的签名并拒绝未正确签名的消息.
  • 在HTTP请求中编写自定义标头.无论如何都可以模拟标题.

但是,任何经验丰富的黑客或知道签名算法的开发人员仍然可以生成签名良好,格式正确的消息.或者一个非常好的黑客可以反汇编应用程序并访问我的"绝密"通信协议的隐藏技术.

任何想法如何使SayHallo()方法只回答我的移动应用程序的请求?

我们在移动应用程序的环境中运行,通过硬件访问,可以利用硬件功能完成某些任务.

如果有人想知道,我正在考虑如何使移动应用程序足够安全,以便敏感的应用程序,如银行业务.

谢谢你的想法.

security android cryptography web-services windows-phone-7

16
推荐指数
2
解决办法
2000
查看次数

Amazon SQS“长轮询”配置。服务器与客户端

很久以前,亚马逊推出了长轮询功能。有了这个,就可以在队列上配置“接收消息等待时间”参数。根据文档,有效值在 0 - 20 秒范围内。

在此处输入图片说明

在客户端,我们也可以在每个MessageReceiveRequest上配置这个参数。我正在使用适用于 .NET 的 AWS 开发工具包。

var receiveRequest = new ReceiveMessageRequest 
{ 
    QueueUrl = "https://queue-url-goes-here.com", 
    MaxNumberOfMessages = 10, 
    VisibilityTimeout = 30, 
    WaitTimeSeconds = 20 // This should tell if we want long polling or not
 };
Run Code Online (Sandbox Code Playgroud)

问题:

a) Queue中配置的Receive Message Wait Time与Message Receive Request中设置的WaitTimeSeconds属性有什么关系?他们会独立工作吗?或者客户端中设置的值覆盖队列中设置的值(对于该单个请求)。

b) 在某些情况下,C# 客户端是否会超时?我正在考虑将两个值都设置为最大值(20 秒),但我担心这可能会导致 C# 长轮询操作超时。

c) 最佳实践是什么。WaitTimeSeconds >接收消息等待时间

c# amazon-sqs aws-sdk

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

C#制作了Lambda的字典

我在定义快速访问Lambda表达式的字典时遇到了麻烦.

我们假设我们有一个这样的知名类:

class Example
{
    public string Thing1;
    public DateTime Thing2;
    public int Thing3;
}
Run Code Online (Sandbox Code Playgroud)

想要做的是这样的事情:

var getters = new Dictionary<string, IDontKnowWhatGoesHere>();
getters.Add("Thing1", x => x.Thing1);
getters.Add("Thing3", x => x.Thing3);
Run Code Online (Sandbox Code Playgroud)

这可能吗?

编辑:

这是我对这个对象的用例:

List<Example> array = new List<Example>();

// We actually get this variable set by the user
string sortField = "Thing2";

array.Sort(getters[sortField]);
Run Code Online (Sandbox Code Playgroud)

非常感谢您的帮助.

c# lambda expression-trees

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

JQuery UI编码噩梦

我希望能够将任何字符串传递给JQuery UI中的按钮文本.

假设我有这个字符串:

Ajouter L'amie a la liste"amies"

实际传递此文本而不会导致大量JavaScript错误的唯一方法是对其进行HTML编码.

registerhtml.dialog({
        modal: true,
        title: 'My Dialog Title',
        resizable: false,
        buttons: [
            {
                text: 'Ajouter L&#39;amie a la liste &quot;amies&quot;',
                click: function(){
                    // Do something important
                    $(this).dialog('close');
                }
            },
            {
                text: 'Cancel',
                click: function() {
                    $(this).dialog('close');
                }
            }
        ]
    });
Run Code Online (Sandbox Code Playgroud)

但我没有在按钮中获得任何人类可读文本.只有相同的编码文本.

有没有快速解决此问题的方法?也许我在按钮对象中缺少一个选项.

或者我应该戴上手套,打电话给护士并在JQuery-ui.js文件中开始手术?

jquery jquery-ui html-encode html-escape-characters

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