Brauche dringend hilfe in PHP

09/28/2012 07:09 cypherxxl#1
Hallo liebe Community

Ich brauche dringend hilfe bei einem Script.

Ich benötige ein login für dieses Script.

Es ist soweit fertig, nur leider weiss ich nicht wie ich dazu ein login schreiben soll.

Wenn ein benutzer z.b diese adresse eingibt: [Only registered and activated users can see links. Click Here To Register...]

sollte ein login kommen, in dem der Benutzer seine Login daten für die datenbank eingeben muss, und erst dann sollte sich das Iframe öffnen das in dem Script enthalten ist.

Quasi eine UserID zuweisung über das login script.

Ich hoffe es kann mir jemand helfen, ich weiss das es nicht schwer zu machen ist, und nur wenige Minuten dauert, dennoch bin ich nicht in der lage dazu da meine PHP kenntnisse nicht ausreichen :(

Hier ist der bereits "fast" fertige code, es fehlt wie gesagt nur ein login script.

Wichtig hierbei ist, das dieses Script komplett SQL-injection (Exploit) Sicher ist.

Code:
<?php
date_default_timezone_set('Europe/Berlin');
function ms_escape($data) { //Zu jeder Benutzereingabe hinzufügen!
	if(!isset($data) or empty($data)) return '';
	if(is_numeric($data)) return $data;
	$non_displayables = array(
		'/%0[0-8bcef]/',			// url encoded 00-08, 11, 12, 14, 15
		'/%1[0-9a-f]/',				// url encoded 16-31
		'/[\x00-\x08]/',			// 00-08
		'/\x0b/',					// 11
		'/\x0c/',					// 12
		'/[\x0e-\x1f]/'				// 14-31
	);
	foreach($non_displayables as $regex)
		$data = preg_replace($regex,'',$data);
		$data = str_replace("'","''",$data);
	return $data;
}

if (!$link = mssql_connect('Server-IP', 'Name', 'Passwort'))
	die ('Konnte keine Verbindung zur Datenbank herstellen. Bitte stellen Sie sicher, dass Sie die Login Daten für die Datenbank richtig eingegeben haben.');
	
else {
	$sql		= "SELECT [UserID], [Point] FROM [PS_UserData].[dbo].[Users_Master] WHERE [UserUID] = '$UserUID'";
	$res		= mssql_query($sql);
	$fet		= mssql_fetch_array($res);
	$ucp		= '<div class="ub">Eingeloggt als '.$fet[0].' - Deine AP: '.number_format($fet[1], 0, ',', '.').'</div>
	$UserID		= ms_escape($fet[0]);
	$useruid	= $UserUID;
	$userid		= $UserID;
	if (isset($_SERVER['HTTP_REFERER']))
		$ref    	= $_SERVER['HTTP_REFERER'];
	else
		$ref = '';
	$zeit = time();
				
    
    }
if (isset($UserUID) && $UserUID != false)
	echo '<iframe src="http://wallapi.com/api/ps/?key=372f7c56b14a8d1920f2e07adff9aa62&uid&uid='.$UserUID.'&widget=p1_1" " name="frame1" scrolling="auto" frameborder="no" align="center" height = "1200px" width = "100%"></iframe>';

?>
Ich bin für wirklich jede hilfe Dankbar.
09/28/2012 07:49 lanara#2
#moved
09/28/2012 09:31 kissein#3
Hier ein simples http auth via PHP

PHP Code:
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
    
header('WWW-Authenticate: Basic realm="My Realm"');
    
header('HTTP/1.0 401 Unauthorized');
    echo 
'Zugang nicht gestattet';
    exit;
} else {
    
//do stuff
}
?>
09/28/2012 10:14 cypherxxl#4
Naja, das ist aber kein Login script, wo sich der user anmelden kann um dann eine UserUID zugewisen zu bekommen.

Vestehst du was ich meine?

Dennoch vielen dank für deine mithilfe :)
09/28/2012 11:20 kissein#5
Überprüfe die Eingabe mit der Abfrage des Users in der DB.
Bei übereinstimmung ne Session starten und die Werte setzen.
Danach einfach immer auf die Sessionwerte überprüfen.

Sofern dass im OP kein Copy&Paste Code ist sollte der Einbau des Prinzips verständlich sein.
09/28/2012 12:09 cypherxxl#6
Naja, ich hatte oben bereits erwähnt das meine Kenntnisse nicht ausreichend sind.

Ich hatte gehofft, das dies jemand für mich machen kann.

Ich würde auch ein endgeld dafür zahlen.

Grüße.
09/30/2012 05:51 cypherxxl#7
Kann mir denn niemand helfen? :(
09/30/2012 08:53 justBuy#8
adde mich mal Skype.
Kann dir helfen verstehe nur net was du meinst.
09/30/2012 23:12 Zettabytes*#9
Mach das doch über Sessions.
Geht jemand auf die Homepage wird überprüft ob eine Session vorhanden ist.
Wenn ja, wird der Frame angezeigt, wenn nicht dann das Login.

bsp.

PHP Code:
if(isset($_SESSION['user])
{
     include('
frame.php');
}
else
{
    include('
loginform.php')


So würde ich das Lösen...
10/01/2012 00:13 cypherxxl#10
Ich habe da nicht soviel ahnung von, ich brauche jemanden der mir das fertig codet.

Ich versuche es mal besser zu beschreiben.

Es ist nur eine datei.php in dieser datei soll alles drin sein.

Ein user ruft die datei.php auf (nicht eingeloggt)<- Er wird nun dazu aufgefordert sich einzuloggen.

Das login ist ebenfalls in der datei.php:
Code:
if (!$UserUID = session::check());
	
else {
	$sql		= "SELECT [UserID], [Point] FROM [PS_UserData].[dbo].[Users_Master] WHERE [UserUID] = '$UserUID'";
Jetzt gibt der user seine daten ein, und folgendes Iframe wird geöffnet:
Code:
if (isset($UserUID) && $UserUID != false)
	echo '<iframe src="http://wallapi.com/api/ps/?key=372f7c56b14a8d1920f2e07adff9aa62&uid&uid='.$UserUID.'&widget=p1_1" " name="frame1" scrolling="auto" frameborder="no" align="center" height = "1200px" width = "100%"></iframe>';
else
	echo 'Bitte erst einloggen';
Ich bekomme das allein leider nicht hin.

So sieht der Code für die Datenbank aus:
Code:
function ms_escape($data) { //Zu jeder Benutzereingabe hinzufügen!
	if(!isset($data) or empty($data)) return '';
	if(is_numeric($data)) return $data;
	$non_displayables = array(
		'/%0[0-8bcef]/',			// url encoded 00-08, 11, 12, 14, 15
		'/%1[0-9a-f]/',				// url encoded 16-31
		'/[\x00-\x08]/',			// 00-08
		'/\x0b/',					// 11
		'/\x0c/',					// 12
		'/[\x0e-\x1f]/'				// 14-31
	);
	foreach($non_displayables as $regex)
		$data = preg_replace($regex,'',$data);
		$data = str_replace("'","''",$data);
	return $data;
}

if (!$link = mssql_connect('Server_IP', 'Datenbank_Name', 'Passwort'))
	die ('Konnte keine Verbindung zur Datenbank herstellen. Bitte stellen Sie sicher, dass Sie die Login Daten für die Datenbank richtig eingegeben haben.');
10/01/2012 00:15 Zettabytes*#11
Ja, funktioniert über Sessions.

Schreib mich mal per PN an, kann dir sicherlich helfen. ;)

Edit:

Ich würde es etwas anders machen.
Wie gesagt, würde einfach eine Session machen.

Also ein login Block und der Block mit dem iFrame.

auf Deutsch gesagt:

wenn(Session['benutzer'] == wahr)
{
da ist dann dein iFram
}
wenn falsch
{
zeigt es den Login Block an
}
10/01/2012 01:05 insaneInfinity#12
Wie Zettabytes schon sagt ist es echt simpel mit einer If/else combo zu lösen !

Code:
if(Session==wahr){
öffne das iframe }else{
ansonsten die Login Form
}
10/01/2012 13:04 ..Zeus..#13
Ich glaube du suchst das hier xD
Code:
<?php

function ms_escape($data) { //Zu jeder Benutzereingabe hinzufügen!
	if(!isset($data) or empty($data)) return '';
	if(is_numeric($data)) return $data;
	$non_displayables = array(
		'/%0[0-8bcef]/',			// url encoded 00-08, 11, 12, 14, 15
		'/%1[0-9a-f]/',				// url encoded 16-31
		'/[\x00-\x08]/',			// 00-08
		'/\x0b/',					// 11
		'/\x0c/',					// 12
		'/[\x0e-\x1f]/'				// 14-31
	);
	foreach($non_displayables as $regex)
		$data = preg_replace($regex,'',$data);
		$data = str_replace("'","''",$data);
	return $data;
}

$dbhost = '127.0.0.1';
$dbuser = 'Shaiya';
$dbpass = 'Shaiya123';

mssql_connect($dbhost, $dbuser, $dbpass);
session_start();

if (isset($_SESSION['UserUID']))
	echo '<iframe src="http://wallapi.com/api/ps/?key=372f7c56b14a8d1920f2e07adff9aa62&uid&uid='.$_SESSION['UserUID'].'&widget=p1_1" " name="frame1" scrolling="auto" frameborder="no" align="center" height = "1200px" width = "100%"></iframe>';
else if (isset($_POST['login'])) {
	$userid		= ms_escape($_POST['userid']);
	$password	= ms_escape($_POST['password']);
	
	$res = mssql_query("SELECT [UserUID], [UserID], [Point] FROM [PS_UserData].[dbo].[Users_Master] WHERE [UserID] = '".$userid."' AND [Pw] = '".$_POST['password']."'");
	if (mssql_num_rows($res) == 0){
		?>
		<h1>Login erforderlich!</h1>
		<br>
		<font color="red">Kein Benutzer gefunden.</font>
		<br>
		<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
			<table>
				<tr><td>Benutzername: </td><td><input type="text" name="userid" value="Benutzername"></td></tr>
				<tr><td>Passwort: </td><td><input type="password" name="password" value="Passwort"></td></tr>
				<tr><td></td><td><input type="submit" name="login" value="Einloggen"></td></tr>
			</table>
		</form>
		<?php
		exit();
	}
	
	$useruid = mssql_fetch_array($res);
	$_SESSION['UserUID'] = $useruid[0];
	Header("Location: ".$_SERVER['PHP_SELF']);	
} else {
	?>
	<h1>Login erforderlich!</h1>
	<br>
	<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
		<table>
			<tr><td>Benutzername: </td><td><input type="text" name="userid" value="Benutzername"></td></tr>
			<tr><td>Passwort: </td><td><input type="password" name="password" value="Passwort"></td></tr>
			<tr><td></td><td><input type="submit" name="login" value="Einloggen"></td></tr>
		</table>
	</form>
	<?php
}

?>[CODE]
[/CODE]
10/01/2012 13:13 Hiris#14
PhP-Self ist soweit ich weiß eine große Sicherheitslücke, hat mir mal jemand gesagt, kann aber sein das ich mich täusche^^
10/01/2012 13:20 ..Zeus..#15
Stimmt. Das habe ich selber noch nicht gewusst, danke :) PHP_SELF bietet 'ne recht einfache Möglichkeit für XSS.

Hier mit SCRIPT_NAME anstatt von PHP_SELF:

Code:
<?php

function ms_escape($data) { //Zu jeder Benutzereingabe hinzufügen!
	if(!isset($data) or empty($data)) return '';
	if(is_numeric($data)) return $data;
	$non_displayables = array(
		'/%0[0-8bcef]/',			// url encoded 00-08, 11, 12, 14, 15
		'/%1[0-9a-f]/',				// url encoded 16-31
		'/[\x00-\x08]/',			// 00-08
		'/\x0b/',					// 11
		'/\x0c/',					// 12
		'/[\x0e-\x1f]/'				// 14-31
	);
	foreach($non_displayables as $regex)
		$data = preg_replace($regex,'',$data);
		$data = str_replace("'","''",$data);
	return $data;
}

$dbhost = '127.0.0.1';
$dbuser = 'Shaiya';
$dbpass = 'Shaiya123';

mssql_connect($dbhost, $dbuser, $dbpass);
session_start();

if (isset($_SESSION['UserUID']))
	echo '<iframe src="http://wallapi.com/api/ps/?key=372f7c56b14a8d1920f2e07adff9aa62&uid&uid='.$_SESSION['UserUID'].'&widget=p1_1" " name="frame1" scrolling="auto" frameborder="no" align="center" height = "1200px" width = "100%"></iframe>';
else if (isset($_POST['login'])) {
	$userid		= ms_escape($_POST['userid']);
	$password	= ms_escape($_POST['password']);
	
	$res = mssql_query("SELECT [UserUID], [UserID], [Point] FROM [PS_UserData].[dbo].[Users_Master] WHERE [UserID] = '".$userid."' AND [Pw] = '".$_POST['password']."'");
	if (mssql_num_rows($res) == 0){
		?>
		<h1>Login erforderlich!</h1>
		<br>
		<font color="red">Kein Benutzer gefunden.</font>
		<br>
		<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="POST">
			<table>
				<tr><td>Benutzername: </td><td><input type="text" name="userid" value="Benutzername"></td></tr>
				<tr><td>Passwort: </td><td><input type="password" name="password" value="Passwort"></td></tr>
				<tr><td></td><td><input type="submit" name="login" value="Einloggen"></td></tr>
			</table>
		</form>
		<?php
		exit();
	}
	
	$useruid = mssql_fetch_array($res);
	$_SESSION['UserUID'] = $useruid[0];
	Header("Location: ".$_SERVER['SCRIPT_NAME']);	
} else {
	?>
	<h1>Login erforderlich!</h1>
	<br>
	<form action="<?php echo $_SERVER['SCRIPT_NAME'];?>" method="POST">
		<table>
			<tr><td>Benutzername: </td><td><input type="text" name="userid" value="Benutzername"></td></tr>
			<tr><td>Passwort: </td><td><input type="password" name="password" value="Passwort"></td></tr>
			<tr><td></td><td><input type="submit" name="login" value="Einloggen"></td></tr>
		</table>
	</form>
	<?php
}

?>