Готовьтесь к выходу службы WCF - PullRequest
0 голосов
/ 12 декабря 2011

Я использую ASP.NET 4 WCF Services для некоторых транзакций данных. Чтобы предотвратить CSRF (подделка межсайтовых запросов), я хотел бы добавить некоторые данные к выводу. Любые предложения о том, как это сделать?

[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class TestService : ServiceBase
{
    [WebGet(
        ResponseFormat = WebMessageFormat.Json,
        UriTemplate = "/test.json")
    ]
    public MyResponse Test ()
    {
        MyResponse resp;
        try
        {
            Response.Write("for(;;){}"); // <-- Fix needed
            resp = new MyResponse();
        }
        catch (Exception ex)
        {
            AjaxException aex = new AjaxException() { 
                message = string.Format("Test failed. Exception: {0}.", ex.Message)
            };
            throw new WebFaultException<AjaxException>(aex, HttpStatusCode.InternalServerError);
        }
        return resp;
    }
}

[DataContract]
public class MyResponse {
    public MyResponse() { }
    [DataMember()]
    public long time = ServiceUtility.Convert(DateTime.Now);
    [DataMember()]
    public string secret { get; set; }
}

1 Ответ

1 голос
/ 12 декабря 2011

Я предлагаю вам избегать использования метода HTTP GET для операций WCF, которые могут изменить состояние.Насколько мне известно, современные браузеры не позволяют выполнять межсайтовые POST-запросы с типом контента JSON - поэтому это должно предотвращать CSRF-атаки.

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

...