2012-06-18 3 views
2

У меня есть очень простой скрипт, который создает пользователя:

<?php 
include 'mysqlserver.php'; 
session_start(); 



$con = mysql_connect($mysql_host, $mysql_username,$mysql_password); 
if (!$con) { 
die('Could not connect: ' . mysql_error()); 
} 


mysql_select_db($mysql_db, $con); 

$newuser = $_POST[username]; 
$newpassword = $_POST[password]; 
$confirmnewpassword = $_POST[confirmpassword]; 

if ($newpassword != $confirmnewpassword) { 
die('Passwords do not match.'); 
} 

if ($newuser == null) { 
die('You need to choose a username!'); 
} elseif ($newpassword == null) { 
die('You need to enter a password!'); 
} 

$avail_query = mysql_query("SELECT * FROM users WHERE username='$newuser'"); 

$avail_numrows = mysql_num_rows($avail_query); 

if ($avail_numrows != 0) { 
die('That user already exists'); 
} 


mysql_query("INSERT INTO users (username, password) 
VALUES ('$newuser', '$newpassword')"); 


$_SESSION['username'] == $newuser; 

mysql_close($con); 
?> 

<script type="text/javascript"> 

function enterUCP(){ 
window.location = "/member.php" 
} 

</script> 
</head> 
<body onLoad="setTimeout('enterUCP()', 3000)"> 
Account created! Logging you in... 
</body> 

Первоначально мой сценарий просто перенаправлены вас на страницу входа в систему после создания учетной записи. Я пытаюсь настроить его, чтобы вы вошли в систему после создания учетной записи. По какой-то причине я не могу редактировать $ _SESSION ['username'] или любые другие переменные сеанса, хотя я начал сеанс в строке 3. Я очень смущен, так как некоторые из моих других PHP-скриптов правильно управляют переменными $ _SESSION , и я не могу сказать, что в моих силах.

P.S. Пожалуйста, не комментируйте безопасность моей системы. Это, наверное, ужасно неуверенно, но я просто пишу для прототипа.

EDIT: Просто, чтобы сделать это немного менее бесполезным вопросом, может ли кто-нибудь найти серьезные недостатки безопасности here?

+0

Я читаю его ... но не забудьте поставить «session_start()» в самом начале скрипта (после открытия php-тега) :) –

+0

@ErenorPaz, не нужно, пока он перед отправкой чего-либо для клиента (эхо, печать ..) – Adi

+0

Что делать, если включение дает ошибку? Хорошо, в этом случае не будет никаких подключений, поэтому он прекратит выполнение в любом случае, но, как вы сказали, «прежде чем что-либо будет отправлено в браузер» :) –

ответ

6

Изменение:

$_SESSION['username'] == $newuser; 

к:

$_SESSION['username'] = $newuser; 

Вы сравнения вместо настройки.

+0

Спасибо! * гигантский facepalm * – Jaxkr

+1

Бывает, особенно по понедельникам! – ceejayoz

+2

@Jaxkr больше facepalm будет проходить после вашего первого SQL-инъекции: D, братский совет .. посмотрите [на это] (http://stackoverflow.com/questions/60174/best-way-to-prevent- sql-injection-in-php) – Adi

3

$ _SESSION ['username'] == $ newuser;

удалить знак второй =.

$_SESSION['username'] = $newuser; 
+0

проклятие ... секунды поздно – javajavajava

+0

Имейте +1 в любом случае. :-) – ceejayoz

3

о Гоша :)

$_SESSION['username'] == $newuser; 

двойной равен sign..put только один, и он будет работать :)

$_SESSION['username'] = $newuser; 
+0

слишком поздно .. хорошо работа ceejayoz и пользователь1454749 :) –

+0

Yep. * facepalm * Должен был найти его сам. – Jaxkr

3

многих людей уже ответил на ваш вопрос, но я Жду» t хочу поставить это в комментарии. Во-первых, вы исправить свой код, изменяя

$_SESSION['username'] == $newuser; 

к:

$_SESSION['username'] = $newuser; 

ВАЖНО:

В то время как вы узнаете MySQLi или PDO, сделать это в код

$newuser = mysql_real_escape_string($_POST[username]); 

для защиты лет urself form SQL Injection

Убедитесь, что вы выполняете аналогичное экранирование для всех входных данных, которые вы используете в запросе.

+0

Спасибо, человек. С этого момента сделаем это. – Jaxkr

Смежные вопросы