2014-12-22 4 views
0

로그인 시스템에 문제가 있습니다.SQLException : 문자열 '' '다음에 닫히지 않는 따옴표

다음

An unhandled exception of type 'System.Data.SqlClient.SqlException' occurred in Microsoft.Practices.EnterpriseLibrary.Data.dll

Additional information: Unclosed quotation mark after the character string '''. Incorrect syntax near '''.

는 로그인 코드 :

나는 아포스트로피 문자 (') 나는 오류를 추가 할 때. 이것은 사용자 이름과 비밀 번호를 별도로 취하고 있지만 작동합니다.

public String getSenha(string user) 
    { 
     String Query = "SELECT senha FROM dbo.Login WHERE usuario = '" + user + "'"; //Comando 

     Conexao Connection = new Conexao(); //Instancia a classe conexao 
     object ret = Connection.QueryScalar(Query); //Executa o comando e salva o resultado em 'ret' 

     if (ret.GetType() == typeof(int)) 
      return null; 
     else 
      return (string)ret; 
    } 

public Boolean checkUser(string user) 
    { 
     String Query = "SELECT COUNT(usuario) FROM dbo.Login WHERE usuario = '" + user + "'"; 
     Conexao Connection = new Conexao(); 

     if ((int)Connection.QueryScalar(Query) > 0) // renorno de 0 significa que nao existe esse usuario. 
      return true; 
     else 
      return false; 
    } 

public Object QueryScalar(string Command) 
    { 
     // Error is thrown here 
     return DatabaseFactory.CreateDatabase("Windows.Properties.Settings.dboSoftwareGSCConnectionString").ExecuteScalar(CommandType.Text, Command); 
    } 
+0

아, 진실 .. thks –

+4

은 문제가있는 곳의 명령 문자열을 표시합니다. – dbugger

+0

나는 최선의 질문을 공식화하는 법을 배워야한다. 개선되기를 바랍니다. –

답변

5

이것은 고전적인 SQL 인젝션입니다. SQL에서는 명령문을 작은 따옴표로 묶습니다. 따라서 한 번 인용 부호를 사용하면 이스케이프 처리를하지 않기 때문에 조만간 명령문이 끝납니다. 또한 악성 사용자의 공격에 취약해질 수 있습니다. 이를 방지하려면 매개 변수화 된 SQL을 사용해야합니다. 참조 : http://www.dotnetperls.com/sqlparameter