2016-05-02 11 views
1

Ich habe folgendes Problem:asp.net C# login Homepage Fehler

Im Erstellen einer Webseite asp.net und C# und in der ersten Seite ist die Anmeldung, die HTML ist im Grunde zwei Textfelder und 1-Taste, Weiche fordern sie die folgende Funktion:

protected void Button1_Click(object sender, EventArgs e) 
    { 

     ServicioIS.Service1SoapClient objeto = new ServicioIS.Service1SoapClient(); 
      string a = ci.Value.ToString(); 
      string b = pass.Value.ToString(); 
      // bool x = objeto.Log(a,b); 
      bool flag = false; 
      SqlConnection con = new SqlConnection(); 
      con.ConnectionString = "Server=.;database=Proyecto.mdf;user=;password="; 
      con.Open(); 
      string check = "SELECT COUNT(*) FROM Admin WHERE login ='" + a + "'"; 
      SqlCommand com = new SqlCommand(check, con); 
      int cont = Convert.ToInt32(com.ExecuteScalar().ToString()); 
      con.Close(); 
      if (cont == 1) 
      { 
       con.Open(); 
       string checkpass = "SELECT pass FROM Admin WHERE login = '" + a + "'"; 
       SqlCommand ds = new SqlCommand(checkpass, con); 
       string contra = ds.ExecuteScalar().ToString().Replace(" ", ""); 
       con.Close(); 
       if (a == contra) 
       { 
        flag = true; 
       } 
      } 
      if (flag) 
      { 
       Response.Write("Contraseña Correcta"); 
      } 
      else 
      { 
       Response.Write("usuario o contraseña invalidos"); 
      } 


    } 

die Fehler und der Stack-Trace ist die folgende:

Line 31:    SqlConnection con = new SqlConnection(); 
Line 32:    con.ConnectionString = "  "Server=.;database=Proyecto.mdf;user=;password="; 
Line 33:    con.Open(); 
Line 34:    string check = "SELECT COUNT(*) FROM Admin WHERE login ='" + a + "'"; 
Line 35:    SqlCommand com = new SqlCommand(check, con); 

Source File: c:\Users\Fabrizio\Desktop\Nueva carpeta  (2)\ProyectoIS\WebAppIS\WebAppIS\Interface\Login.aspx.cs Line: 33 

Stack Trace: 


[SqlException (0x80131904): Login failed for user ''.] 
System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception,  Boolean breakConnection, Action`1 wrapCloseInAction) +5347119 
    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +546 
System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +1693 
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +69 
System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) +30 
System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) +317 
System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) +892 
System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) +311 
    System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData) +646 
System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) +278 
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool pool, DbConnection owningObject, DbConnectionOptions options, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) +38 
System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +732 
System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal oldConnection) +85 
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +1057 
System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +78 
System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +196 
System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +146 
System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +16 
System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +94 
System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +110 
System.Data.SqlClient.SqlConnection.Open() +96 
WebAppIS.Interface.Login.Button1_Click(Object sender, EventArgs e) in c:\Users\Fabrizio\Desktop\Nueva carpeta (2)\ProyectoIS\WebAppIS\WebAppIS\Interface\Login.aspx.cs:33 
System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9627718 
System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +103 
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10 
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13 
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1724 

PD: im Visual Studio 2012 verwenden, wenn sie es leichter machen, es zu beheben :)

+0

Sie haben eine SQL-Injection-Schwachstelle. – SLaks

+1

In nicht wissen wie viel davon ist ein Kopieren einfügen Fehler ... "Server =. Database = Proyecto.mdf; user =; password =' Sie haben keinen Benutzer in Ihrer Verbindungszeichenfolge und basierend auf der Stack-Trace, das ist dein Problem. – Kritner

+0

auch SQL-Injektion, müssen Sie Eingaben parametrieren – Kritner

Antwort

0

Klingt wie ein Benutzerauthentifizierungsproblem. SQL versteckt die Details des Fehlers aus Sicherheitsgründen, aber Sie sollten in der Lage sein, weitere Informationen in Ihrem SQL Server-Fehlerprotokoll zu finden. Informationen zur Fehlerbehebung finden Sie unter folgendem Link: https://msdn.microsoft.com/en-us/library/ms366351.aspx

+0

danke für die Antwort, das ist neue Sachen für mich immer noch versuchen, es herauszufinden ... Ich denke, krank nur Xml für jetzt verwenden. –

0

Der SQL-Fehler bedeutet, dass Ihre Anwendung keine Berechtigungen für die Datenbank besitzt. Ich glaube, das liegt daran, dass Sie ein Benutzer- und Kennwortattribut angeben, es aber leer lassen. Versuchen Sie eine vertrauenswürdige Verbindung zu verwenden.

Außerdem wurde in den Kommentaren erwähnt, dass Ihr Code anfällig für SQL-Injection-Angriffe ist. Das ist sehr wahr. Sie sollten parametrisiertes SQL verwenden, um Ihre Variable wie unten gezeigt zur SQL-Anweisung hinzuzufügen.

SqlParam param; 

string check = "SELECT COUNT(*) FROM Admin WHERE [email protected]"; 
SqlCommand com = new SqlCommand(check, con); 
param = new SqlParameter("@LoginName", SqlDbType.VarChar); 
param.Direction = ParameterDirection.Input; 
param.Value = a; 
com.Parameters.Add(param); 
+0

Vielen Dank für die Antwort und den Code, das ist neues Zeug für mich so und ist außer Kontrolle geraten (ich habe einmal eine kleine App Datenbank, so dass ich das auch tun konnte), krank, nur Xml für jetzt, denke ich. Ich bin sehr dankbar für die Info tho –

+0

Gern geschehen. Wenn Sie einen Beitrag hilfreich finden, ist es üblich, ihn zu bewerten. Und auch den hilfreichsten Post als akzeptierte Antwort auszuwählen. Diese Up-Stimmen und akzeptierten Antworten helfen uns, Fähigkeiten auf dieser Seite freizuschalten. –