2013-09-13 2 views
0

Я работаю над приложением ASP.Net C# (мое первое!), Которое содержит в нем обработчик HTTP. Мое приложение работает с несколькими параметрами, которые передаются через URL. Мой вопрос (ы) выглядит следующим образом:Как я могу безопасно обрабатывать параметры POST в обработчике HTTP с помощью C#?

Пункт ввода моих приложений через обработчик 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-адресу? Я понимаю, что это null, но может ли это привести к проблемам?

Опасно или небезопасно вызывать простой URL (т. Е. Должен ли я всегда назвать его указанными значениями параметров)?

Каков наилучший способ назвать «чистый» URL-адрес ashx для запуска приложения, но не для проблем с риском?

Приложение будет выполнять серию последующих перенаправлений GET, поскольку оно накапливает значения и передает их обратно в приложение через строку запроса. Должен ли я делать POST или GET при первом вызове приложения?

Извините, что задал один и тот же вопрос несколькими способами, но я немного смущен по этой теме, и это мой первый раз, когда я пишу такое приложение. Любое терпение и советы, которые вы могли бы дать о том, как безопасно обрабатывать и инициализировать параметры, очень признательны!

+0

'context.Request [" something "]' is safe, как вы его используете, зависит от вас: если 'something' не указано, вы получите значение« null ». Но если вы затем попытаетесь, например, do 'something.Substring (...)', не проверяя, имеет ли он значение null, вы выкинете исключение. –

+0

Спасибо, Тим. Это хорошо знать, я обязательно буду выполнять проверки перед любыми операциями. – K997

ответ

1

Нет ничего плохого в том, чтобы опустить параметры в конечную точку. Как разработчик вы отвечаете за обеспечение того, что клиент может отправить вам. Если вы ожидаете, что параметр отсутствует, введите ошибку (например, HttpException).

Если вы создания или обновления данных (то есть вставка или обновление записей в базе данных) лучший метод был бы POST или PUT.

Редактировать - Вот пример того, как можно обрабатывать входные данные:

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!"); 
    } 
} 
+0

Спасибо, это приятно знать. Итак, используя мой пример исходного кода, где я могу поймать и выбросить HttpException? Кроме того, как мне сделать «POST» или «PUT» в ASP.NET?Кажется, что 'GET' очень прямолинейный, но я не уверен, как сделать« POST »? – K997

+0

Вы можете обрабатывать ошибку, где бы вы ни хотели. Я обновил свой ответ, чтобы дать вам пример. Что касается 'POST' или' PUT', как делается запрос? По форме в браузере? Javascript? Другой веб-сервер? –

+0

Это очень полезно, спасибо! Другой веб-сервер будет вызывать мое приложение ... в частности, это будет услуга Twilio, вызывающая мой вызов. – K997

0

Вы не можете. Интернет опасен.

+1

Ха, не так ли? ;) – K997

+0

It * есть * ответ. –

 Смежные вопросы

  • Нет связанных вопросов^_^