Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Mysql login checker


Rekomendowane odpowiedzi

Opublikowano
string connectionString = "datasource=***;username=***;password=***;database=***";

            MySqlConnection mySqlConnection = new MySqlConnection(connectionString);

 

            string selectString =

            "SELECT username, password " +

            "FROM mybb_users " +

            "WHERE username = '" + textBox1.Text + "' AND password = '" + textBox2.Text + "'";

 

            MySqlCommand mySqlCommand = new MySqlCommand(selectString, mySqlConnection);

            mySqlConnection.Open();

            String strResult = String.Empty;

            strResult = (String)mySqlCommand.ExecuteScalar();

            mySqlConnection.Close();

 

            if (strResult.Length == 0)

            {

                MessageBox.Show ("Failed To login");

              //could redirect to register page

}

            else

            {

                MessageBox.Show ("YOU ARE LOGGED IN!");

                //set loggin in sessions variables

            }

 

        }

 

przy skrypcie wyskakuje mi error: An unhandled exception of type 'MySql.Data.MySqlClient.MySqlException' occurred in MySql.Data.dll


Co robić jak żyć?


Carl Johnson Aka CJ

Kings Never Die
After five years at east coast, It was time to go home.

 

Opublikowano

@up

Szczerze? Nie wiem jaki program robisz, ale jeżeli to będzie coś dostępnego publicznie to nie robiłbym łączenia się z bazą w ten sposób. Ta metoda jest kompletnie niebezpieczna, lepiej zrobić to wykorzystując php jako pośrednika między C# a mysl'em.

Opublikowano

@up

Szczerze? Nie wiem jaki program robisz, ale jeżeli to będzie coś dostępnego publicznie to nie robiłbym łączenia się z bazą w ten sposób. Ta metoda jest kompletnie niebezpieczna, lepiej zrobić to wykorzystując php jako pośrednika między C# a mysl'em.

Mistrzu, Jaką metodą podążać, jaką metodę wybrać?


Carl Johnson Aka CJ

Kings Never Die
After five years at east coast, It was time to go home.

 

Opublikowano

Tutaj kod z VB.NET, łatwo skonwertujesz go na C#

Ja robiłem to tak:

Try
                Dim request As HttpWebRequest = CType(WebRequest.Create("http://strona.pl/logowanie.php"), HttpWebRequest)
                request.Method = "POST"
                request.ContentType = "application/x-www-form-urlencoded"
                Dim Post As String = ("login=" & login.Text & "&haslo=" & haslo.Text)
                Dim byteArray() As Byte = Encoding.UTF8.GetBytes(Post)
                request.ContentLength = byteArray.Length
                Dim DataStream As Stream = request.GetRequestStream()
                DataStream.Write(byteArray, 0, byteArray.Length)
                DataStream.Close()
                Dim Response As HttpWebResponse = request.GetResponse()
                DataStream = Response.GetResponseStream()
                Dim reader As New StreamReader(DataStream)
                Dim ServerResponse As String = reader.ReadToEnd()
                reader.Close()
                DataStream.Close()
                Response.Close()

                Select Case ServerResponse
                    Case "Zalogowano"
                        'Zrób coś
                    Case "Brak użytkownika w bazie"
                        'Zrób coś innego
                End Select
            Catch
                msgbox("Nie można połączyć się z serwerem")
            End Try

Teraz w tym pliku php dodajesz przechwycenie danych z POSTa i porównujesz je z tym co jest w bazie, jeżeli się zgadza to np: w aplikacji dajesz dostęp userowi do czegoś, jeżeli się dane nie zgadzają do wyświetlasz jakiś komunikat, że dane do logowania się nie zgadzają.

PHP (do mocnych przeróbek):

<?php
$hostname = "";
$password = "";
$username = "";

$db = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL");
mysql_select_db("BAZA") or die(mysql_error());

$query = mysql_query("ZAPYTANIE SQL");
	$count = mysql_num_rows($query);
		if(mysql_num_rows($query)) {
			while($row = mysql_fetch_array($query)){
				echo 'Zalogowano';
			}
		} else {
				echo 'Brak użytkownika w bazie';
			}
}
?>

Nie dodałem tutaj przechwycenia tego co idzie POSTem ale raczej bez problemu to dodasz i przerobisz to.

Te dwa kody daję tylko poglądowo, będziesz musiał przerobić je pod swoje potrzeby.

Opublikowano

using System;
using System.IO;
using System.Net;
 
namespace ConsoleApplication5
{
    class Program
    {
        static void Main(string[] args)
        {
            string login, haslo;
            do
            {
                Console.WriteLine("Podaj login");
                login = Console.ReadLine();
                Console.WriteLine("Podaj haslo");
                haslo = Console.ReadLine();
            }
            while (string.IsNullOrEmpty(login) || string.IsNullOrEmpty(haslo));
 
            Console.WriteLine("Trwa logowanie...");
            Console.WriteLine(Zaloguj(login, haslo) ? "Witaj, {0}!" : "Podałeś nieprawidlowe dane!", login);
            Console.ReadKey();
        }
        static bool Zaloguj(string login, string haslo)
        {
            var request = WebRequest.Create("http://mojastrona.pl/logowanie.php") as HttpWebRequest;
            request.Method = "POST";
            request.ContentType = "application/x-www-form-urlencoded";
            using (var sw = new StreamWriter(request.GetRequestStream()))
                sw.Write(string.Format("login={0}&password={1}", System.Web.HttpUtility.UrlEncode(login), 
                                                                 System.Web.HttpUtility.UrlEncode(haslo)));
            using (var response = request.GetResponse())
            using (var sr = new StreamReader(response.GetResponseStream()))
                return sr.ReadToEnd().Equals("1");
        }
    }
}
logowanie.php

<?php

$dbhost = "localhost";
$dblogin = "root";
$dbpass = "";
$dbname = "";


if (!isset($_POST['login']) || !isset($_POST{'password']))
exit;
$pdo = new PDO("mysql:host={$dbhost};dbname={$dbname}", $dblogin, $dbpass);
$st = $pdo->prepare("SELECT id FROM members WHERE login=? AND password=?");
$st->execute(array(urldecode($_POST['login']), urldecode($_POST['password'])));
$res = $st->fetch(PDO::FETCH_ASSOC);
print isset($res['id']) ? 1 : 0;

 

<?php
$hostname = "";
$password = "";
$username = "";

$db = mysql_connect($hostname, $username, $password) or die("Unable to connect to MySQL");
mysql_select_db("BAZA") or die(mysql_error());

$query = mysql_query("ZAPYTANIE SQL");
	$count = mysql_num_rows($query);
		if(mysql_num_rows($query)) {
			while($row = mysql_fetch_array($query)){
				echo 'Zalogowano';
			}
		} else {
				echo 'Brak użytkownika w bazie';
			}
}
?>

 

mysql_* zostało usunięte w PHP 7, dodatkowo w żaden sposób nie czyścisz danych wejściowych, a to miejsce na atak sql injection.
Opublikowano

@up

Szczerze? Nie wiem jaki program robisz, ale jeżeli to będzie coś dostępnego publicznie to nie robiłbym łączenia się z bazą w ten sposób. Ta metoda jest kompletnie niebezpieczna, lepiej zrobić to wykorzystując php jako pośrednika między C# a mysl'em.

W jaki sposób łączenie się przez php jest bezpieczniejsze? Załóżmy, że mam program i chciałbym przypisywać użytkownikom licencję czasową na ten program. Później licencja byłaby sprawdzana w programie co kilkanaście minut. Jedyne co użytkownik musiałby wprowadzić to login i hasło serwisu, którego dotyczy program i do loginu byłaby przypisywana właśnie licencja. Czy to niebezpieczne jest bardzo?

4417049059_6234f40fb5.jpg
Storm has passed but the destruction are still visible.

Opublikowano

W jaki sposób łączenie się przez php jest bezpieczniejsze? Załóżmy, że mam program i chciałbym przypisywać użytkownikom licencję czasową na ten program. Później licencja byłaby sprawdzana w programie co kilkanaście minut. Jedyne co użytkownik musiałby wprowadzić to login i hasło serwisu, którego dotyczy program i do loginu byłaby przypisywana właśnie licencja. Czy to niebezpieczne jest bardzo?

Nikt nie uzyska dostępu do bazy danych za pomocą loginu i hasła z programu.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...