Autor Zpráva
akrij
Profil *
Moderátor Joker: Tři vlákna se stejným dotazem sloučena do jednoho. akrij, Jirkaxxx a aaaweb jsou tentýž tazatel.
Upravil jsem původní titulek „Autentikace Mysql 5.5“, jelikož se později ukázalo, že dotaz se týká verze PHP

Dobrý den,

mám prosbu.... scripty dříve napsané funkční na Mysql 4.0 - 5.0 ....nyní mám problém se přihlásit přes script do vytvořené auth části na verzi Mysql 5.5.

Nevíte kde by mohl být problém??

Děkuji

Script vypadá takto?:

<?
@extract($_REQUEST);
session_start();
 require "../spojenisdb.php";
 if (($login<>"")&&($passw<>"")) // nove prihlaseni
 {
     session_register(PHP_AUTH_USER);
    $PHP_AUTH_USER=$login;
    session_register(PHP_AUTH_PW);
    $PHP_AUTH_PW=md5($passw);
    
 }
 
 @$vety=mysql_query("select * from amigos_uzivatele where login='$PHP_AUTH_USER' and heslo='$PHP_AUTH_PW' ;");
 if (! $vety) :
  echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="9%"><img src="image/zarovka.jpg" width="80" height="93"></td>
    <td width="91%"><font face="arial, Arial, Helvetica, sans-serif" size="2"><b><font color="#FF0000" face="Arial, Helvetica, sans-serif">Technnicky 
      problem . </font></b><font face="Arial, Helvetica, sans-serif"><br>
      <br>
      Chybne pristupove jmeno nebo heslo. Zkuste to <a href="index.php">znovu</a>.</font></font></td>
  </tr>
</table>';
  $spatne=1;
  exit;
 else :
  if (mysql_num_rows($vety)==0) :
      echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="100"><img src="image/zarovka.jpg" width="80" height="93"></td>
    <td width="90%"><font face="arial, Arial, Helvetica, sans-serif" size="2"><b><font color="#FF0000" face="Arial, Helvetica, sans-serif">Neopravneny 
      pristup. </font></b><font face="Arial, Helvetica, sans-serif"><br>
      <br>
      Pravdepodobne jste zadali neplatne prihlasovaci jmeno nebo heslo. Je take 
      mozne, ze z duvodu vasi delsi necinnosti vyprsel casovy limit Vaseho prihlaseni. 
      V takovemto pripade se prihlaste se <a href=index.php target=_top>znovu</a>.<br>
      </font></font></td>
  </tr>
</table>
';  
      $spatne=1;
      exit;
  else :
    $veta=mysql_fetch_array($vety);
    if ($veta[heslo] != $PHP_AUTH_PW) :
      echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="100"><img src="image/zarovka.jpg" width="80" height="93"></td>
    <td width="90%"><font face="arial, Arial, Helvetica, sans-serif" size="2"><b><font color="#FF0000" face="Arial, Helvetica, sans-serif">Neopravneny 
      pristup. </font></b><font face="Arial, Helvetica, sans-serif"><br>
      <br>
      Pravdepodobne jste zadali neplatne prihlasovaci jmeno nebo heslo. Je take 
      mozne, ze z duvodu vasi delsi necinnosti vyprsel casovy limit Vaseho prihlaseni. 
      V takovemto pripade se prihlaste se <a href=index.php target=_top>znovu</a>.<br>
      <br>
      </font></font></td>
  </tr>
</table>
';  
      $spatne=1;
     exit;
    endif;
  endif;
 endif;

if ($spatne==1) :
?>
<SCRIPT LANGUAGE="JavaScript">
   window.close("<?echo $soubor;?>");
</SCRIPT>
<?
endif;
?>
Joker
Profil
akrij:
Asi to bude souviset spíš s verzí PHP, než s verzí MySQL.

Ten skript jako celek je velmi zastaralý (odpovídá zhruba době před 10+ lety) a ještě navíc používá nevhodné postupy.
Chtělo by ho to celý přepsat.

Seznam problémů:
• @extract($_REQUEST); Viz manuál: Nepoužívejte extract() na nedůvěryhodná data (jako $_GET, $_FILES, atd.) … A ještě kombinované se zavináčem, aby se správce o případných chybách (neúspěšných pokusech web hacknout) ani nedověděl.
• session_register je deprecated a od PHP 5.4 už ani neexistuje.
• Navíc session_register vyžaduje zapnuté register_globals, což je dnes už obvykle vypnuté.
• SQL injection, třeba login: ' or heslo='955db0b81ef1989b4a4dfeae8061a9a6' -- a heslo „heslo“ mě přihlásí jako prvního uživatele s heslem „heslo“. Možná by šlo vymyslet i účinnější hack.
• Opět stínění chybových hlášek zavináčem.
• Na řádku 46 je řetězec neuzavřený v uvozovkách
• Použití nedefinované proměnné $soubor
• Celý ten kód vůbec nic neudělá v případě úspěšného přihlášení (ani nikam neuloží informaci, že uživatel byl úspěšně přihlášen), takže jsem zmatený z toho, k čemu to vlastně má sloužit.
akrij
Profil *
Dobrý den,

script se mi přweopisovat nyní nechce( zabralo by mi to mnoho času ) ...děkuji za doporučení funguje to na verzi PHP4 ( omlouvám se za omyl as Mysql ).... nyní potřebuji upravit - docílit toho abych mohl pokračovat dále do tzv administrace systému.

Mohl by jste mi s tím poradit prosím v případě že bych zaslal vše emailem? Díky
panther
Profil
Moderátor Joker: Přesunuto z duplicitně založeného stejného dotazu.

Jirkaxxx:
Moderátor Joker: Poznámka: Přesunuto z duplicitního vlákna, kde akrij použil přezdívku Jirkaxxx
tipl bych, ze by melo stacit zmenit r. 7-10 na nasledujici:
$_SESSION['PHP_AUTH_USER'] = $login;
$_SESSION['PHP_AUTH_PW'] = md5($passw);

Mozna zmenou nastaveni PHP budes muset vymenit i ty tve promenne $login a $passw za $_POST['login'], resp. $_POST['passw'].

Pomijim, ze cely ten kod je neskutecny paskvil a ze by si zaslouzil prepsani (v tomto rozsahu otazka par minut). Proc ale proboha ukladas heslo do session? Tam nema co delat, v SQL dotazu porovnavej primo hodnoty z formulare.
Radek9
Profil
Moderátor Joker: Přesunuto z duplicitně založeného stejného dotazu.

Jirkaxxx:
Moderátor Joker: Poznámka: Přesunuto z duplicitního vlákna, kde akrij použil přezdívku Jirkaxxx
Nepoužívej session_register. Využij normálně superglobální pole $_SESSION. A ten extract() taky vyhoď, to je zlo.
aaaweb
Profil *
Moderátor Joker: Přesunuto z duplicity č.2.

Moderátor Joker: Poznámka: Ve druhém duplicitním vlákně použil akrij pro změnu přezdívku aaaweb
Dobrý den,

můžete mi prosím poradit kde by byl problém při přihlašováni se do systému administrace. Dříve vše byla provozováno na Mysql4 ale nyní je na Mysql5. Nyní se celá akce chová tak, že se přihlášení chová jako problémové.

Můžete mi prosím aniž bych musel nechat přepisovat scripty ( neboť mi to moc nejde ) poradit co upravit?

Script 1.

<?
@extract($_REQUEST);
session_start();
$soubor="spravce.php";
include "./pristup.php";

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?if($lang=="4"){?>windows-1251<?}else{?>windows-1250<?}?>">
<title>VÝCHOVA A VÝCVIK PSA</title>
<LINK REL="STYLESHEET" TYPE="text/css" HREF="./css/style.css">
</head>


<?

$vetyp=mysql_query("select * from amigos_mutace;");
$vetap=mysql_fetch_array($vetyp);?>
<body>
<p align="center">&nbsp;</p>
<p align="center"><font face="Arial" size="2"><b></b></font></p>
<br>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="49%" valign="top"> 
      <div align="right"><font face="Arial" size="2"><b><font size="4" color="#000066">Vyberte 
        jazykovou verzi&nbsp;&nbsp;&nbsp;</font></b></font></div>
    </td>
    <td width="51%"> 
      <a href=spravce.php?lang=1&druh=0&svol=2><img src=./image/cz2.jpg width=35 height=20 border=0></a>     
           
<? if (0) { ?>
            
<? } ?>
    </td>
  </tr>
</table>
<p align="center">&nbsp;</p>
</body>
</html>

SCRIPT 2:

<?
@extract($_REQUEST);

 require "../spojenisdb.php";
  if (($login<>"")&&($passw<>"")) // nove prihlaseni
 {
 $_SESSION['PHP_AUTH_USER'] = $login;
$_SESSION['PHP_AUTH_PW'] = md5($passw);
    
 }
 
 @$vety=mysql_query("select * from amigos_uzivatele where login='$PHP_AUTH_USER' and heslo='$PHP_AUTH_PW' ;");
 if (! $vety) :
  echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="9%"><img src="image/zarovka.jpg" width="80" height="93"></td>
    <td width="91%"><font face="arial, Arial, Helvetica, sans-serif" size="2"><b><font color="#FF0000" face="Arial, Helvetica, sans-serif">Technnicky 
      problem . </font></b><font face="Arial, Helvetica, sans-serif"><br>
      <br>
      Chybne pristupove jmeno nebo heslo. Zkuste to <a href="index.php">znovu</a>.</font></font></td>
  </tr>
</table>';
  $spatne=1;
  exit;
 else :
  if (mysql_num_rows($vety)==0) :
      echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="100"><img src="image/zarovka.jpg" width="80" height="93"></td>
    <td width="90%"><font face="arial, Arial, Helvetica, sans-serif" size="2"><b><font color="#FF0000" face="Arial, Helvetica, sans-serif">Neopravneny 
      pristup. </font></b><font face="Arial, Helvetica, sans-serif"><br>
      <br>
      Pravdepodobne jste zadali neplatne prihlasovaci jmeno nebo heslo. Je take 
      mozne, ze z duvodu vasi delsi necinnosti vyprsel casovy limit Vaseho prihlaseni. 
      V takovemto pripade se prihlaste se <a href=index.php target=_top>znovu</a>.<br>
      </font></font></td>
  </tr>
</table>
';  
      $spatne=0;
      exit;
  else :
    $veta=mysql_fetch_array($vety);
    if ($veta[heslo] != $PHP_AUTH_PW) :
      echo '<table width="100%" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="100"><img src="image/zarovka.jpg" width="80" height="93"></td>
    <td width="90%"><font face="arial, Arial, Helvetica, sans-serif" size="2"><b><font color="#FF0000" face="Arial, Helvetica, sans-serif">Neopravneny 
      pristup. </font></b><font face="Arial, Helvetica, sans-serif"><br>
      <br>
      Pravdepodobne jste zadali neplatne prihlasovaci jmeno nebo heslo. Je take 
      mozne, ze z duvodu vasi delsi necinnosti vyprsel casovy limit Vaseho prihlaseni. 
      V takovemto pripade se prihlaste se <a href=index.php target=_top>znovu</a>.<br>
      <br>
      </font></font></td>
  </tr>
</table>
';  
      $spatne=1;
     exit;
    endif;
  endif;
 endif;

if ($spatne==1) :
?>
<SCRIPT LANGUAGE="JavaScript">
   window.close("<?echo $soubor;?>");
</SCRIPT>
<?
endif;
?>

Děkuji předem
Mike8748
Profil
Moderátor Joker: Přesunuto z duplicity č.2.

aaaweb:
Nyní se celá akce chová tak, že se přihlášení chová jako problémové.
bylo by dobré napsat o jakých problémech je řeč.
aaaweb
Profil *
Moderátor Joker: Přesunuto z duplicity č.2.

Mike8748:
Ahoj ,

jde o to ze se chova akce následovně:

Opakovane po zadani user a passw cykli toto:
Neopravneny pristup.

Pravdepodobne jste zadali neplatne prihlasovaci jmeno nebo heslo. Je take mozne, ze z duvodu vasi delsi necinnosti vyprsel casovy limit Vaseho prihlaseni. V takovemto pripade se prihlaste se znovu.

tedy se nemohu dostat dale do administrace systemu
Majkl578
Profil
Moderátor Joker: Přesunuto z duplicity č.2.

V 2. scriptu chybí na začátku session_start() (pokud je to soubor reprezentující samostatnou stránku). Script jako takový je velmi špatný, obsahuje několik bezpečnostních děr.
aaaweb
Profil *
Moderátor Joker: Přesunuto z duplicity č.2.

Majkl578:
Ikdyz doplnim do druheho scriptu session_start();

chova se stejne bohuzel..

uz prave nevim cca 3. den jak to rozjet.. pokud by byla ochota a zajem mohu púoslat na email blize ...


Majkl578:
na Mysq to bezi upúlne v pohode a od chvile co mam Mysql5.5 je to v haji :(
Mike8748
Profil
Moderátor Joker: Přesunuto z duplicity č.2.

aaaweb:
pro začátek ve skript 2, na řádce 12 smaž zavináč na začátku. ono když něco nefunguje a ještě zavináčem potlačíš chybu tak se těžko neco opraví.
aaaweb
Profil *
Moderátor Joker: Přesunuto z duplicity č.2.

Majkl578:
ano provedl jsem :-)

omlouvam se ale ja jsem natolik zacatecnik, ze .......


Mike8748

vysledek je stejny stale bohuzel zatim nic noveho neni zrejme :(

Ale dekuji moc za tvuj zajem a cas ...
Mike8748
Profil
Moderátor Joker: Přesunuto z duplicity č.2.

aaaweb:
skript2, řádka 44
if ($veta['heslo']

taky by si měl zjistit jestli ta hláška o nepovoleném přístupu je ta co začíná na řádce 30 nebo až ta na 48
aaaweb
Profil *
Moderátor Joker: Přesunuto z duplicity č.2.

Mike8748:
jedna se o hlasku z radku 30 !!!

Ale uvozovky nepomohly :(
Mike8748
Profil
Moderátor Joker: Přesunuto z duplicity č.2.
aaaweb:
pokud jde o hlášku z řádky 30 tak to znamená že mysql dotaz na řádce 12 vrátil 0 výsledků... tedy že v databázové tabulce není nikdo s danou kombinací jména a hesla. takže zkontrolovat databázi.

případně si zkontroluj jestli proměnné $PHP_AUTH_PW a $PHP_AUTH_USER obsahují to co si ty myslíš že obsahují (někde vypiš jejich obsah, třeba v té hlášce na 30 řádku)
aaaweb
Profil *
Moderátor Joker: Přesunuto z duplicity č.2.
Bohuzel v dB je user a s heslem odpovidajicim

A zadavam to spravne...... na PHP4 to slape normalne....delal jsem to 30x asi a tady jsem narazil u Mysql5.5..to nejde

jinak jsme ti poslal email´...
Mike8748
Profil
Moderátor Joker: Přesunuto z duplicity č.2.
aaaweb:
jinak jsme ti poslal email´...
to by mě zajímalo kam si ten email poslal
aaaweb
Profil *
Mike8748:
tak to byl asi omyl :-) djpw.cz@majkl578.cz

a muzu a kam bych mohl ti ten email poslaT

Moderátor Joker: Tři vlákna se stejným dotazem sloučena do jednoho. akrij, Jirkaxxx a aaaweb jsou tentýž tazatel. Od tohoto bodu níže je (případná) nová diskuse po sloučení.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: