-4
我想了解我的代碼出了什麼問題。這是一個登錄進程cp。在編寫正確的用戶名(只有用戶名,僅用於該測試)時,您會得到正確的結果。但是當你不這樣做時,你什麼也得不到 - 我沒有編程它。輸入錯誤的用戶名時沒有任何反應。我的代碼有什麼問題?
我是真的很絕望,試圖解決這整個晚上。請幫幫我。 這是代碼。
算了一筆賬:
如果(isset($ _ POST [ 'CONNECTION_MADE'])){//是已經取得了聯繫?使用隱藏的輸入
$form_user = forms_filter($_POST['form_user']); // filter any tags or any unwanted actions first
$form_pass = forms_filter($_POST['form_pass']); // filter any tags or any unwanted actions first
if (strlen($form_user) > 5 AND strlen($form_user) < 16 AND strlen($form_pass) > 5 AND strlen($form_pass) < 16) {
if (login_blank_filter($form_user, $form_pass) == true) { // are those values length shorter than the minimal value or longer?
$user_name = $form_user;
$raw_password = $form_pass;
$user_pass = password_hash($raw_password, PASSWORD_DEFAULT); // generating a hashed and salted password
$cp_validate_login = mysqli_query($data_connection, "SELECT * FROM `admins` WHERE `username` = '$user_name' ");
if (!$cp_validate_login) { die('error: ' . mysql_error()); }
while ($admin_row = mysqli_fetch_array($cp_validate_login)) {
if (mysqli_num_rows($cp_validate_login) == 1) {
echo "you made it.";
echo mysqli_num_rows($cp_validate_login);
}
else {
echo "not yet there.";
echo mysqli_num_rows($cp_validate_login);
}
}
}
else {
header('Location: index.php?login_status=2');
}
}
}
表:
<?php
if (isset($_GET['login_status'])) {
switch ($_GET['login_status']) {
case 1:
echo "wrong username or password";
break;
case 2:
echo "the inputs has to be filled";
break;
case 3:
echo "username\passwords are too short or too long";
break;
default:
echo "unknown error";
}
}
else {
echo "welcome. log in to the control panel please";
}
?>
</div>
<form name="loginform" method="post" action="index.php" onSubmit="return validateBlank()">
<input type="hidden" name="connection_made" value="">
<div class="login_layout">
<div class="login_right_layout">
user:
</div>
<div class="login_left_layout">
<input class="login_input" name="form_user" type="text">
</div>
<div class="login_right_layout">
password:
</div>
<div class="login_left_layout">
<input class="login_input" name="form_pass" type="password">
</div>
</div>
<input type="submit" value="כניסה" class="login_submit">
</form>
</center>
請幫助我。謝謝。
首先,非常感謝。 1 - 我很高興你提醒我關於查詢中那些危險的變數。問題在於你給我的鏈接 - 我無法理解它,因爲它的例子是由OOP編寫的 - 我不明白也不使用。你可以給我一些其他的東西嗎? 另外,感謝您的解決方案。應該有自己的想法(可能保持清醒24小時不是最好的主意)。 關於使用somone else代碼 - 這是我從來不想做的一件事。再次,缺乏面向對象的知識阻止我與這些人一起工作。 我可以「修補」我目前的代碼嗎? –
順便說一下,我這是怎麼過濾所有: 功能forms_filter($ form_value) { \t回報的stripslashes(用htmlspecialchars(用strip_tags($ form_value))); } –
@OriR您的'forms_filter()'函數不足以保證安全;唯一安全的選擇是準備帶有參數的語句。如果有人提交了像'OR 1 = 1 - -'這樣的用戶名,你的代碼會給這個人管理員權限。至於使用別人的代碼:絕對*是*你應該做什麼,*特別是*有認證,但是*只有*一旦你明白了代碼的作用。我曾經認爲你的方式,但這是非常危險的。如果你只是「修補」你當前的代碼,你將不可避免地錯過其他主要的漏洞。使用一個框架,所以你不必重新發明輪子。 –