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>

元々、私のスクリプトは、アカウントを作成した後、ログインページにリダイレクトするだけでした。アカウントの作成後にログインできるように調整しようとしています。何らかの理由で、3行目でセッションを開始したにもかかわらず、$ _ SESSION['username']または他のセッション変数を編集できません。他のPHPスクリプトの一部が$_SESSION変数を適切に操作しているため、非常に混乱しています。何が違うのかわかりません。

PS私のシステムのセキュリティについてコメントしないでください。恐らくひどく安全ではありませんが、私はプロトタイプのために書いているだけです。

編集:これを少し役に立たない質問にするために、誰かがここで重大なセキュリティ上の欠陥を見つけることができますか?

4

4 に答える 4

6

変化する:

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

に:

$_SESSION['username'] = $newuser;

設定ではなく比較しています。

于 2012-06-18T17:12:21.773 に答える
3

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

2 番目の = 記号を削除します。

$_SESSION['username'] = $newuser;
于 2012-06-18T17:14:12.067 に答える
3

あれまあ :)

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

二重等号..1つだけ入れればうまくいきます:)

$_SESSION['username'] = $newuser;
于 2012-06-18T17:15:21.647 に答える
3

多くの人がすでにあなたの質問に答えていますが、私はこれをコメントに入れたくありませんでした. まず、変更してコードを修正します

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

に:

$_SESSION['username'] = $newuser;

重要:

MySQLi またはPDOを学習している間に、コードに対してこれを行います

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

SQLインジェクションから身を守るために

クエリで使用しているすべての入力に対して、同様のエスケープを行うようにしてください。

于 2012-06-18T17:23:52.250 に答える