web-dev-qa-db-fra.com

Une valeur Request.Form potentiellement dangereuse a été détectée à partir du client (textboxError = "<Responses> <Response ...")

J'utilise la passerelle ozeki ng SMS. Je ne parviens pas à envoyer de SMS à un mobile. S'il vous plaît, aidez-moi à envoyer SMS par Internet vers mobile 

Une valeur Request.Form potentiellement dangereuse a été détectée à partir du client (textboxError = ". Après avoir défini cette valeur, vous pouvez désactiver la validation de la requête en définissant validateRequest =" false "dans la directive Page ou dans la section de configuration. Il est recommandé à votre application de vérifier explicitement toutes les entrées dans ce cas. Pour plus d'informations, voir http://go.Microsoft.com/fwlink/?LinkId=153133 .

Détails des exceptions: System.Web.HttpRequestValidationException: une valeur Request.Form potentiellement dangereuse a été détectée à partir du client (textboxError = "

ET mon fichier cs est

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net;
using System.Text.RegularExpressions;

public partial class _Default : System.Web.UI.Page 
{


    protected void Page_Load(object sender, EventArgs e)
    {
        textboxRecipient.Width = 400;
        textboxMessage.Width = 450;
        textboxMessage.Rows = 10;
        textboxError.Width = 400;
        textboxError.Rows = 5;

        textboxError.ForeColor = System.Drawing.Color.Red;
        textboxError.Visible = false;
        textboxError.Text = "";

        if (!Page.IsPostBack)
        {
            textboxRecipient.Text = "+441234567";
            textboxMessage.Text = "Hello World!";
        }
    }

    protected void buttonSendOnClick(object sender, EventArgs e)
    {
        //are required fields filled in:
        if (textboxRecipient.Text == "")
        {
            textboxError.Text += "Recipient(s) field must not be empty!\n";
            textboxError.Visible = true;
            return;
        }

        //we creating the necessary URL string:
        string ozSURL = "http://127.0.0.1"; //where Ozeki NG SMS Gateway is running
        string ozSPort = "9501"; //port number where Ozeki NG SMS Gateway is listening
        string ozUser = HttpUtility.UrlEncode("admin"); //username for successful login
        string ozPassw = HttpUtility.UrlEncode("admin"); //user's password
        string ozMessageType = "SMS:TEXT"; //type of message
        string ozRecipients = HttpUtility.UrlEncode(textboxRecipient.Text); //who will get the message
        string ozMessageData = HttpUtility.UrlEncode(textboxMessage.Text); //body of message

        string createdURL = ozSURL + ":" + ozSPort + "/httpapi" +
            "?action=sendMessage" +
            "&username=" + ozUser +
            "&password=" + ozPassw +
            "&messageType=" + ozMessageType +
            "&recipient=" + ozRecipients +
            "&messageData=" + ozMessageData;

        try
        {
            //Create the request and send data to Ozeki NG SMS Gateway Server by HTTP connection
            HttpWebRequest myReq = (HttpWebRequest)WebRequest.Create(createdURL);

            //Get response from Ozeki NG SMS Gateway Server and read the answer
            HttpWebResponse myResp = (HttpWebResponse)myReq.GetResponse();
            System.IO.StreamReader respStreamReader = new System.IO.StreamReader(myResp.GetResponseStream());
            string responseString = respStreamReader.ReadToEnd();
            respStreamReader.Close();
            myResp.Close();

            //inform the user
            textboxError.Text = responseString;
            textboxError.Visible = true;
        }
        catch (Exception)
        {
            //if sending request or getting response is not successful Ozeki NG SMS Gateway Server may do not run
            textboxError.Text = "Ozeki NG SMS Gateway Server is not running!";
            textboxError.Visible = true;
        }

    }
}

et ma page d'asp est

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Ozeki NG SMS Gateway Message Sending Example</title>
</head>
<body>
    <center>
    <form id="smsdata" runat="server">
        <asp:Table id="smstable" runat="server" style="text-align:left; border-width:thin; border-color:Silver;" BorderStyle="Solid">
            <asp:TableRow>
                <asp:TableCell ColumnSpan="2">
                    <b>Compose a message:</b>
                    <br />
                    <br />
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow>
                <asp:TableCell HorizontalAlign="Left" VerticalAlign="Top">
                    <asp:Label ID="labelRecipient" runat="server" Text="Recipient: "></asp:Label>
                </asp:TableCell>
                <asp:TableCell>
                    <asp:TextBox ID="textboxRecipient" runat="server"></asp:TextBox>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow>
                <asp:TableCell HorizontalAlign="Left" VerticalAlign="Top">
                    <asp:Label ID="labelMessage" runat="server" Text="Message Text: "></asp:Label>
                </asp:TableCell>
                <asp:TableCell>
                    <asp:TextBox ID="textboxMessage" runat="server" TextMode="MultiLine"></asp:TextBox>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow>
                <asp:TableCell ColumnSpan="2" HorizontalAlign="Center">
                    <asp:Button ID="buttonSend" runat="server" Text="Send Message" OnClick="buttonSendOnClick" />
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow>
                <asp:TableCell ColumnSpan="2" HorizontalAlign="Center">
                    <asp:TextBox ID="textboxError" runat="server" BorderStyle="None" TextMode="MultiLine"></asp:TextBox>
                </asp:TableCell>
            </asp:TableRow>
        </asp:Table>
    </form>
    </center>
</body>
</html>
8
srihari

Votre problème est que la valeur de l'un de vos champs (textboxError) inclut des balises de style XML ou HTML, qui sont par défaut interdites pour éviter aux développeurs de présenter des problèmes de sécurité potentiels dans leurs applications.

La solution est donnée dans le message d'erreur; vous devez ajouter validateRequest="false" dans la directive @Page en haut (omise dans votre exemple) ou dans web.config.

Notez que si vous utilisez .net 4, vous devez revenir au mode validation à partir de la version 2.0, en modifiant légèrement le fichier web.config et en ajoutant:

<system.web>
    <httpRuntime requestValidationMode="2.0" />
</system.web>

Voir cet article MSDN sur requestValidationMode pour plus d'informations sur requestValidationMode.

18
Adrian Wragg

Votre problème est que la valeur de l'un de vos champs (textboxError) inclut des balises de style XML ou HTML, qui sont par défaut interdites pour éviter aux développeurs de présenter des problèmes de sécurité potentiels dans leurs applications.

La solution est donnée dans le message d'erreur; vous devez ajouter 

  [HttpPost]
  [ValidateInput(false)]

Dans le contrôleur

1
Shaheer Ali

J'ai trouvé la solution suivante qui vous permet de ne désactiver que la validation sur un seul champ! (je ne voudrais pas le désactiver pour la page entière)

vb.net:

Public Class UnvalidatedTextBox
    Inherits TextBox
    Protected Overrides Function LoadPostData(postDataKey As String, postCollection As NameValueCollection) As Boolean
        Return MyBase.LoadPostData(postDataKey, System.Web.HttpContext.Current.Request.Unvalidated.Form)
    End Function
End Class

c #:

public class UnvalidatedTextBox : TextBox
{
    protected override bool LoadPostData(string postDataKey, NameValueCollection postCollection)
    {
        return base.LoadPostData(postDataKey, System.Web.HttpContext.Current.Request.Unvalidated.Form);
    }
}

Maintenant, utilisez simplement <prefix:UnvalidatedTextBox id="test" runat="server" /> au lieu de <asp:TextBox et il devrait autoriser tous les caractères (parfait pour les champs de mot de passe!)

1
Peter

cela a juste fonctionné pour moi ...

 [HttpPost, ValidateInput(false)]
 public ActionResult updateContact(FormModel model)
 {
    //contents
 } 
0
Adi_Pithwa