0

我正在开发一个 ASP.Net C# 应用程序(我的第一个!),其中包含一个 HTTP 处理程序。我的应用程序使用通过 URL 传入的几个参数。我的问题如下:

我的应用程序入口点是通过 HTTP 处理程序。当我输入我的 ProcessRequest 方法时,我将 URL 参数的值分配给变量,以便我可以对数据做一些事情。 问题: 这是否安全,即使我在调用 URL 时没有将值设置为任何值?

在我的例子中:我打电话host/handler1.ashx而不是host/handler1.ashx?something=foo

public void ProcessRequest(HttpContext context)
    {
        context.Response.ContentType = "text/plain";

        string something = context.Request["something"];

        context.Response.Write("Hello World: " + something);
    }

当使用不带参数的纯 URL 调用上述方法时,它执行得很好,但字符串something只是空白/空。

附加问题:something如果我没有通过 URL 显式初始化变量,变量会发生什么?我知道它是空的,但这会导致问题吗?

调用纯 URL 是否危险或不安全(即我是否应该始终使用指定的参数值调用它)?

调用“干净”的 ashx URL 以启动应用程序但不存在风险问题的最佳方法是什么?

应用程序将在累积值并通过查询字符串将它们传递回应用程序时执行一系列后续 GET 重定向。我应该在初次调用应用程序时执行 POST 还是 GET?

很抱歉以多种方式提出同一个问题,但我对这个话题有点困惑,这是我第一次编写这样的应用程序。非常感谢您就如何安全处理和初始化参数提供的任何耐心和建议!

4

2 回答 2

1

将参数省略到端点并没有错。作为开发人员,您负责执行允许客户端发送给您的内容。如果您期望一个参数并且它丢失了,则抛出一个错误(例如HttpException)。

如果您正在创建更新数据(即在数据库中插入或更新记录),最好的方法是 aPOSTPUT.

编辑- 这是一个如何处理输入的示例:

public void ProcessRequest(HttpContext context) {
    //Maybe you require a value?
    if (string.IsNullOrEmpty(context.Request["something"])) {
        throw new HttpException(400, "You need to send a value!");
    }

    //Maybe you require a certain value?
    if (context.Request["something"] != "beerIsGood") {
        throw new HttpException(400, "You need to send the right value!");
    }
}
于 2013-09-13T19:22:12.413 回答
0

你不能。互联网很危险。

于 2013-09-13T19:30:14.683 回答