Действительно ли возможно удалить некоторые данные сообщения с HttpModule?

json_decode($data, true); // Returns data in array format 

json_decode($data); // Returns collections 

Итак, если вам нужен массив, вы можете передать второй аргумент как 'true' в функцию json_decode.

5
задан Vogel612 29 October 2014 в 14:16
поделиться

3 ответа

Yes. The following class implements the IHttpModule Interface and registers and event that will fire before the HttpRequestValidationException check occurs. It checks that the request is a POST and that "testinput" is not null and then HTML Encodes it. The Class needs to be registered in your Web.config as an httpModule.

class...

using System;
using System.Collections.Specialized;
using System.Reflection;
using System.Web;

public class PrevalidationSanitizer : System.Web.IHttpModule
{
    private HttpApplication httpApp;

    public void Init(HttpApplication httpApp)
    {
        this.httpApp = httpApp;
        httpApp.PreRequestHandlerExecute += new System.EventHandler(PreRequestHandlerExecute_Event);
    }

    public void Dispose() { }

    public void PreRequestHandlerExecute_Event(object sender, System.EventArgs args)
    {
        NameValueCollection form = httpApp.Request.Form;

        Type type = form.GetType();

        PropertyInfo prop = type.GetProperty("IsReadOnly", BindingFlags.Instance 
            | BindingFlags.IgnoreCase | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy);

        prop.SetValue(form, false, null);

        if (httpApp.Request.RequestType == "POST" != null 
            && httpApp.Request.Form["testinput"])
                httpApp.Request.Form.Set("testinput"
                    , httpApp.Server.HtmlEncode(httpApp.Request.Form["testinput"]));
    }
}

web.config entry...

<system.web>
  <httpModules>
    <add type="PrevalidationSanitizer" name="PrevalidationSanitizer" />
...
8
ответ дан 14 December 2019 в 04:45
поделиться

У меня возникло бы искушение исключить плохой шаблон размещения XML-данных в полевом посте через HTML-форму. Я понимаю, что вы хотите переносить "плавно", что, как я понимаю, означает, что вы хотите какое-то время поддерживать как страницы ASP, так и ASPX. Однако в этом случае вам следует рассмотреть возможность одновременного изменения формы и цели действия формы.

Думаю, это похоже на совет, который я дал здесь . Только в этом случае ситуация ухудшается, поскольку шаблон кода в исходном ASP не соответствует желаемому, даже в рамках ограничений классического ASP.

Если вы не хотите полностью переносить форму ASP и ее действие page в то же время рассмотрите возможность модификации страницы ASP для использования XHR для отправки XML в ashx, который помещает XML в безопасное место и возвращает GUID. Поместите возвращенный GUID в скрытое поле вместо поля, которое изначально содержало XML. На принимающей странице ASPX используйте GUID для получения ранее отправленного XML.

0
ответ дан 14 December 2019 в 04:45
поделиться

Похоже, хлопот много. Что плохого в использовании флага validateRequest на уровне страницы?

Просто убедитесь, что вы правильно дезинфицируете ввод и закодируете его, если вам нужно его где-нибудь сохранить и / или убедитесь, что вы не плюете вернуть поле в браузер без его кодирования.

0
ответ дан 14 December 2019 в 04:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: