Strona 1 z 1

Rejestracja usera wraz z rejestracją z innego skryptu

: 13 czerwca 2011, 21:09
autor: syngress
Witam wszystkich serdecznie.

Mam swoją stronę opartą w dużej części o PHP - chciałem wraz z rejestracja użytkownika przeprowadzić tą samą rejestrację na forum z tymi samymi danymi które wpisywane są z poziomu mojej strony.

Najważniejsze rzeczy na których najbardziej mi zależy to ten sam id, username, password, email - reszta w miarę możliwości po zalogowaniu do Panelu Użytkownika.

Co muszę dodać do swojego skryptu aby umożliwić automatyczną rejestrację również na forum phpBB.
Mówimy o wersji 3.0.8

Może jeszcze inaczej:
Jak zapisywane jest hasło w bazie danych phpBB 3.0.8 z MD5 ? Jakiś inny algorytm.
Zamieniając row[x] na $zmienne jestem w stanie na sztywno dopisywać do bazy danych wartości - problemem jak sądzę pozostaje hasło i jego szyfrowanie.

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 13 czerwca 2011, 21:36
autor: jaroslw
Polecam skorzystać z funkcji user_add(). Troszkę więcej na ten temat jeszcze tutaj. Do przechowywania haseł używana jest funkcja phpbb_hash().

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 13 czerwca 2011, 22:07
autor: syngress
Ok dziękuje za info.
Jak ja to mam zrobić z poziomu mojego skryptu z rejestracją ?

Kod: Zaznacz cały

require_once ('ścieżka do pliku z funkcją ? ');

$user_row = array(
    'username'              => $_POST['username'],
    'user_password'         => phpbb_hash($_POST['password']),
i tak dalej .. .. .. . .. 
);
??

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 13 czerwca 2011, 22:24
autor: jaroslw
Gdzieś na początku poleciłbym skorzystać jeszcze z kodu integrującego sesje użytkowników. Po linii:

Kod: Zaznacz cały

include($phpbb_root_path . 'common.' . $phpEx);
dodaj jeszcze:

Kod: Zaznacz cały

include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
To powinno wystarczyć.

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 14 czerwca 2011, 11:46
autor: syngress
Mam to zrobione w następujący sposób:

index.php odpowiada w moim przypadku za wyświetlenie formularza rejestracyjnego.
Do index.php dołączam plik funkcjarejestracji.inc
Na samej górze pliku index.php dopisuje:

Kod: Zaznacz cały

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './forum/';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/functions_user.' . $phpEx);

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup();
?>
w pliku funkcjarejestracji.inc umieszczam (w miejscu do którego skrypt dotrze wyłącznie wtedy kiedy rejestracja na mojej stronie przebiegnie prawidłowo) treść:

Kod: Zaznacz cały

$user_row = array(
    'username'              => $_POST['user_name'],
    'user_password'         => phpbb_hash($_POST['password']),
    'user_email'            => $_POST['email'],
    'group_id'              => 2, // by default, the REGISTERED user group is id 2
    'user_timezone'         => (float) $data['tz'],
    'user_lang'             => $data['lang'],
    'user_type'             => USER_NORMAL,
    'user_ip'               => $user->ip,
    'user_regdate'          => time(),
);

// Register user...
$user_id = user_add($user_row);
if (!$user_id) {
          $feedback =  die(mysql_error());
          return $feedback;
          exit();
        }
I wszystko działa ! ale .....

Zapisuje dane w phpbb_users - nie mogę się zalogować na forum. Otrzymuje komunikat taki sam jak ten przy źle wpisanym username lub błędnie podanym haśle.

Oczywiście mogę zresetować hasło - forum wyśle mi link aktywacyjny oraz nowe hasło i wszystko działa.
Tak więc na 100% problem jest z dodaniem hasła do bazy danych :/

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 14 czerwca 2011, 12:28
autor: Pico
Brakuje Ci odwołania do funkcji phpbb_hash zawartej w pliku function.php

include($phpbb_root_path . 'includes/functions_user.' . $phpEx);
za tym dodaj
include($phpbb_root_path . 'includes/function.' . $phpEx);

i wszystko powinno działać ;)

EDIT:
hmm, plik common.php zawiera odwołanie do functions.php, ale warto spróbować na sztywno :)

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 14 czerwca 2011, 12:55
autor: syngress
OK DZIAŁA !!! :D

Pico - mój błąd, zrobiłem literówkę w:

Kod: Zaznacz cały

'user_password'         => phpbb_hash($_POST['password']),
dlatego sprawiał problemy. Teraz wszystko ślicznie działa. A ja wam ŚLICZNIE DZIĘKUJE !!!!

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 14 czerwca 2011, 14:02
autor: jaroslw
To ja jeszcze zwrócę uwagę na bezpieczeństwo takiego rozwiązania. Zapisywanie danych bezpośrednio ze zmiennych $_POST i $_GET to bardzo zły pomysł (SQL injection). Warto zamiast nich zastosować funkcję request_var().

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 14 czerwca 2011, 14:16
autor: syngress
weeb pisze:To ja jeszcze zwrócę uwagę na bezpieczeństwo takiego rozwiązania. Zapisywanie danych bezpośrednio ze zmiennych $_POST i $_GET to bardzo zły pomysł (SQL injection). Warto zamiast nich zastosować funkcję request_var().
Jeśli masz funkcje która sprawdza co przechodzi przez $_POST i $_GET - SQL injection nie powinno być już takie straszne. Z drugiej strony SQL injection jest bardzo wrażliwe - wystarczy odizolować kilka znaków - i już nic nie jesteś w stanie wstrzyknąć ;)

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 14 czerwca 2011, 14:22
autor: jaroslw
Zgadza się. Ktoś może jednak skorzystać z Twojego powyższego kodu i nie zatroszczyć się o filtrowanie ;) Na to chciałem zwrócić uwagę. Po co później pisać własne funkcje, skoro można skorzystać z gotowych.

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 14 czerwca 2011, 14:35
autor: syngress
Masz rację. Cały kod który odpowiedzialny jest za modyfikacje bazy danych powinien być zabezpieczony.
Można to zrobić na kilka sposobów, oto jeden bardziej prosty:

Kod: Zaznacz cały

if (accountvalidator($_POST['xxx']) || strlen($_POST['xxx'] >= 6 || i tak dalej .. )) {

... cały kod grzebiący w bazie danych ..  }

function accountvalidator() {

// Musi zawierac dozwolony znak
if (strspn($_POST['xxx'],"aąbcćdeęfghijklłmnopqrsśtuóvwxyzżźAĄBCĆDEĘFGHIJKLŁMNOPQRSŚTUÓVWXYZŻŹ0123456789-_") != strlen($_POST['xxx'])) {
return false;
}
// Min i Max dlugosc
if (strlen($_POST['xxx']) < 6) {
return false;
}
if (strlen($_POST['xxx']) > 25) {
return false;
}
// Nazwy OUT
if (eregi("^((root)|(bin)|(daemon)|(adm)|(lp)|(sync)|(shutdown)|(halt)|(mail)|(news)|(uucp)|(operator)|(games)|(mysql)|(httpd)|(nobody)|(dummy)|(www)|(cvs)|(shell)|(ftp)|(irc)|(debian)|(ns)|(download))$", $_POST['xxx'])) {
return false;
}
}
i tak dalej. Analogicznie dla GET ..

Dopisano 15.06.2011
Przy

Kod: Zaznacz cały

$query
warto zastosować funkcje

Kod: Zaznacz cały

sprintf()
Do neutralizacji ciągów znaków funkcja:

Kod: Zaznacz cały

mysql_escape_string()

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 23 czerwca 2011, 22:38
autor: syngress
Nie śmiecąc, wykorzystam ten temat jako kontynuacje - chciałem zapytać o jeszcze jedną kwestie.
Przy automatycznej rejestracji Użytkownika z mojej strony, w tabeli "phpbb_users" tworzy się nowy rekord.

Ponieważ często testuje skrypt - kasuje rekordy zaraz po rejestracji, ale widzę że na stronie forum w statystykach wyświetlana jest suma zarejestrowanych Użytkowników.

Byłem przekonany że skrypt phpbb zlicza user'ów po zapisanych rekordach w tabeli "phpbb_users".
Jak widzę zlicza i przechowuje te dane osobno.

Jak mogę uregulować listę zarejestrowanych Użytkowników na forum ?
Co muszę kasować oprócz rekordu z tabeli "phpbb_users" kasując Użytkownika z poziomu phpmyadmin ?

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 24 czerwca 2011, 06:55
autor: Pico
hmm.. zerknij do pliku function_user.php i znajdź funkcję user_delete. Zobacz jakie tabele czyści z rekordów itd. ;)

Oto Ci chyba chodzi

Kod: Zaznacz cały

	// Decrement number of users if this user is active
	if ($user_row['user_type'] != USER_INACTIVE && $user_row['user_type'] != USER_IGNORE)
	{
		set_config_count('num_users', -1, true);
	}

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 24 czerwca 2011, 17:54
autor: syngress
Chodzi mi o to:

Obrazek

Pomimo wykasowania użytkownika z bazy danych, statystyki pozostają niezmienione.
Już pędzę spojrzeć do function_user.

Re: Rejestracja usera wraz z rejestracją z innego skryptu

: 24 czerwca 2011, 18:52
autor: daroPL
Trzeba zsynchronizować statystyki.
PA -> Główna -> Synchronizacja i resetowanie statystyk -> Zsynchronizuj statystyki.