Autor |
Beitrag |
JungerIslaender
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: So 30.08.09 23:14
|
|
BenBE
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: So 30.08.09 23:47
Schau mal genau hin ...
Schon mal die Fehlermeldungen von PHP auf E_ALL gesetzt?
Achja: Und nutz bitte entweder Escaping oder Prepared Statements für deine Abfragen.
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
JungerIslaender
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: Mo 31.08.09 15:55
BenBE hat folgendes geschrieben : | Schau mal genau hin ...
Schon mal die Fehlermeldungen von PHP auf E_ALL gesetzt? |
Wie mache ich das??
BenBE hat folgendes geschrieben : |
Achja: Und nutz bitte entweder Escaping oder Prepared Statements für deine Abfragen. |
Die brauche ich doch nur wenn der user eine Eingabe macht oder die Abfrage verändern kann. Wie soll er das machen wenns nur von mir im Quelltext benutzt wird.
Ich finde den Fehler einfach nicht. Wenn ich es wüsste hätte ich diesen für einen Menschen der sich mit php gut auskennt lächerlichen code, nicht gepostet.
Zuletzt bearbeitet von JungerIslaender am Mo 31.08.09 15:58, insgesamt 1-mal bearbeitet
|
|
andras
Beiträge: 460
Win XP, Win Vista Home Premium, Ubuntu Dapper Drake
Delphi 2005 Pers
|
Verfasst: Mo 31.08.09 17:42
|
|
BenBE
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mo 31.08.09 18:53
JungerIslaender hat folgendes geschrieben : | BenBE hat folgendes geschrieben : | Schau mal genau hin ...
Schon mal die Fehlermeldungen von PHP auf E_ALL gesetzt? |
Wie mache ich das?? |
php.net/error_reporting
JungerIslaender hat folgendes geschrieben : | BenBE hat folgendes geschrieben : |
Achja: Und nutz bitte entweder Escaping oder Prepared Statements für deine Abfragen. |
Die brauche ich doch nur wenn der user eine Eingabe macht oder die Abfrage verändern kann. Wie soll er das machen wenns nur von mir im Quelltext benutzt wird. |
Wird er auch ... und der Benutzer hat Einfluss darauf ...
JungerIslaender hat folgendes geschrieben : | Ich finde den Fehler einfach nicht. Wenn ich es wüsste hätte ich diesen für einen Menschen der sich mit php gut auskennt lächerlichen code, nicht gepostet. |
hmmm, War das bei "PHP in 14 Tagen" im Vorwort oder der Einleitung schon behandelt??? Oder fällt das unter Esotherische Programmierweise, weil dann würde ich Sprachen wie Whitespace empfehlen - dann sieht wenigstens keiner den Code.
JungerIslaender hat folgendes geschrieben : | Warum funktioniert das hier:
Quelltext 1: 2: 3: 4:
| session_start(); //Starte eine Session, oder nehme die aktuelle wieder auf session_register('useremail'); //Registriere die Variable $username in der Session (IIRC) $abfrage = "SELECT email FROM konten WHERE user LIKE '$username'"; //Greife auf die undefinierte Variable $username zu $useremail = mysql_query($abfrage); | //Führe eine Abfrage nach einem leeren Username durch
|
Tut doch, was du ihm gesagt hast ...
Ich empfehle hier mal den vollständigen Verzicht auf die Nutzung von RegisterGlobals-Magic, oder anderen PHP-Convenience-Funktionen; die reißen mehr Probleme, als sie beheben ... $_SESSION ist hier die Antwort. Dann kann übrigens auch das session_register wegfallen.
andras hat folgendes geschrieben : | Weil deine Variable im string steht und somit nicht der Wert der Variable genommen wird sondern der Name, aber ganz sicher bin ich mir da nicht... |
Ach die Variable $username wird schon ausgewertet ... die ist nur undefiniert, weil RegisterGlobals auf ordentlich konfigurierten Servern abgeschlatet ist und damit die Session nicht automatisch entpackt wird.
andras hat folgendes geschrieben : | Hätte das ganze so gelöst:
Quelltext 1: 2: 3: 4:
| session_start(); session_register('useremail'); $abfrage = "SELECT email FROM konten WHERE user LIKE ".$username; $useremail = mysql_query($abfrage); | |
xkcd.com/327/
Mal abgesehen davon, dass das so auch nicht gehen wird ...
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Christian V.
Beiträge: 311
Win Xp Prof
Turbo Delphi 2005
|
Verfasst: Mo 31.08.09 20:33
_________________ Hardware runs the world, software controls the hardware, code generates software - Have You already coded today?
|
|
jcp
Hält's aus hier
Beiträge: 6
|
Verfasst: Sa 24.10.09 19:23
|
|
JungerIslaender
Beiträge: 427
Erhaltene Danke: 5
Win XP
Delphi 7; Delphi 2005
|
Verfasst: Mi 28.10.09 23:09
Cool Danke werd ich sofort ausprobieren.
|
|
jcp
Hält's aus hier
Beiträge: 6
|
Verfasst: Do 29.10.09 12:55
Hidiho,
ein Tip möchte ich Dir noch geben. Du solltest niemals in deinen Quelltexten $_POST, $_GET, $_SESSION oder $_SERVER verwenden. Stattdessen solltest Du gegen Schnittstellen programmieren. Ich habe für Dich hier meine Session Klassen vereinfacht als eine Klasse dargestellt, vielleicht kannste damit was anfangen und weiter ausbauen, viel Glück!
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164:
| // session temp path //ini_set('seesion.save_path', "n;/temp");
// session no hang on URLs ini_set('seesion.use_trans_sid', "0");
// sesion use only cookies ini_set('seesion.use_only_cookies', "0"); ini_set('seesion.use_cookies', "1");
// session no autostart ini_set('seesion.auto_start', "0");
// session trash leeren ca. aller 100 Aufrufe //ini_set('session.gc_probability', "1"); //ini_set('session.gc_divisor', "100"); class jcp_session {
static $expires = 120; private $crypt; private $session; private $userexpires; private $session_name;
public function __construct( $name = false, $time = false, $crypt = null ) { $this->session_name = $name; $this->userexpires = $time; $this->crypt = $crypt; $this->session = array();
if ($this->session_name){ session_name( $this->session_name ); } session_start();
if (is_array($_SESSION) && !empty($_SESSION) && isset($_SESSION['verfall'])){
if ($this->check()){ $this->session = $_SESSION; $this->session['verfall'] = time(); $_SESSION = array(); } }
}
public function save() { $_SESSION = $this->session; return true; }
public function add( $var, $value) { if ( ! is_string( $var )){ return false; } $this->_add($var, $value); return true; }
public function get( $offset ) { if ( is_string( $offset )){ return $this->_get($offset); }
if (!is_array($offset) || empty( $offset )){ return null; }
$values = array(); foreach ( $offset as $index){ $values[$index] = $this->_get($index); }
if ( empty($values)){ return null; }
return $values; }
public function delete( $offset = null ) { if ( is_null( $offset )){ return $this->_delete(); } elseif (is_string($offset)) { return $this->_del( $offset ); } else { return false; } }
private function _del( $offset ) { if ( isset( $this->session[$offset] )){ unset($this->session[$offset]); } return true; }
private function _delete() { $_SESSION = array(); $this->session = array(); @setcookie(session_name(), '', 0, "/"); session_destroy(); return true; }
private function _get( $offset ) { if ( isset( $this->session[$offset] )){ if (!is_null($this->crypt)){ return $this->crypt->encrypt($this->session[$offset]); } return $this->session[$offset]; } return null; }
private function _add( $varname, $value ) { if (!is_null($this->crypt)){ $value = $this->crypt->encrypt($value); } $this->session['verfall'] = time(); $this->session[$varname] = $value; }
private function check() { $zeit_old = $_SESSION['verfall']; if ($this->userexpires){ $zeit_new = strtotime( '-'.$this->userexpires.' minutes'); } else { $zeit_new = strtotime( '-'.self::$expires.' minutes'); }
if ( $zeit_new < $zeit_old ) { return true; } else { $this->_delete(); if ($this->session_name){ session_name( $this->session_name ); } session_start(); session_regenerate_id(true); return false; } }
}// Class End |
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39:
| inferface jcp_crypt_interface { protected function encrypt( $plaintext ); protected function decrypt( $crypttext ); } class jcp_crypt implements jcp_crypt_interface { static $cypher = 'blowfish'; static $mode = 'cfb'; static $key = 'JCP-Nice_27985_GirlsInBikiniOnMyPrivateBeach';
protected function encrypt( $plaintext ) { $td = mcrypt_module_open(self::$cypher, '', self::$mode, ''); $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND); mcrypt_generic_init($td, self::$key, $iv); $crypttext = mcrypt_generic($td, $plaintext); mcrypt_generic_deinit($td); mcrypt_module_close($td); return $iv.$crypttext; }
protected function decrypt( $crypttext ) { $td = mcrypt_module_open(self::$cypher, '', self::$mode, ''); $ivsze = mcrypt_enc_get_iv_size($td); $iv = substr($crypttext,0,$ivsze); $crypttext = substr($crypttext, $ivsze); $plaintext = ''; if ($iv){ mcrypt_generic_init($td, self::$key, $iv); $plaintext = mdecrypt_generic($td,$crypttext); mcrypt_generic_deinit($td); } mcrypt_module_close($td); return $plaintext; }
} //Class End |
Aufruf
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| $session = new jcp_session('my_session',7900, new jcp_crypt()); //hinzufügen $session->add('var_a','mama'); $session->add('var_b','papa');
//auslesen $var_a = $sesion->get('var_a'); $var_b = $sesion->get('var_b');
//löschen $session->delete('var_a'); $session->delete('var_b');
//alle löschen $session->delete();
//session am ende zurück schreiben $session->save(); |
|
|
|