为什么我无需使用 php cURL 发送用户名和密码就可以访问管理面板
Why I am getting access to the admin panel without sending username and password by using php cURL
我为实验制作了一个基本的登录表单,并尝试使用 cURL 登录。我正在与 php 合作。我已经确保没有人可以在没有登录(身份验证)的情况下进入 index.php 主页面。但是现在,当我尝试使用 cURL 访问时,我明白了。我认为我的登录和会话处理代码一定有问题。我已尽力而为,但没有得到任何解决方案。请帮助解决这个问题。
提前致谢。
1.这是位于 session.php
中的会话处理代码
<?php
class session{
public static function init(){
session_start();
}
public static function set($key,$value){
$_SESSION[$key] = $value;
}
public static function get($key){
if (isset($_SESSION[$key])) {
return $_SESSION[$key];
}
else{
return false;
}
}
public static function cheaksession(){
self::init();
if(self::get("login") == false){
self::destroy();
header("Location: login.php");
}
}
public static function destroy(){
session_destroy();
}
}
?>
2。这是位于 login.php
中的登录表单代码
<?php
include "lib/session.php";
session::init();
?>
<?php include "lib/Database.php"; ?>
<?php include "helpers/format.php"; ?>
<?php
$db = new Database();
$fm = new format();
?>
<?php
$err = 0;
if ($_SERVER['REQUEST_METHOD'] == 'POST' ) {
$username = $fm->validation($_POST['username']);
$password = $fm->validation($_POST['password']);
$username = mysqli_real_escape_string($db->link,$username);
$password = mysqli_real_escape_string($db->link,$password);
if($username == 'fahad' && $password == '1234') {
session::set("login",true);
session::set("username",$username);
session::set("userId",1);
header("Location: index.php");
}
else{
$err = 1;
}
}
?>
3。这是用于会话检查的主页代码驻留在index.php
<?php
include "lib/session.php";
session::cheaksession();
?>
4.这是攻击的cURL代码
<?php
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,'http://localhost/Hackalgo/DummySite/index.php');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
?>
通过执行此脚本,我正在抓取上面提到的 index.php 的 html 页面 ( 3).但是在 index.php (3) 中有一个会话检查器方法应该迫使我进入登录页面 login.php在(2)中提到。但它不起作用,index.php (3) 在登录页面 (2) 中未经任何身份验证就被抓取。
- curl 默认不遵循重定向。
- 在 cheaksession 调用之后,没有什么可以阻止 PHP 执行。
发送 Location 后调用 exit() 左右 header。
我为实验制作了一个基本的登录表单,并尝试使用 cURL 登录。我正在与 php 合作。我已经确保没有人可以在没有登录(身份验证)的情况下进入 index.php 主页面。但是现在,当我尝试使用 cURL 访问时,我明白了。我认为我的登录和会话处理代码一定有问题。我已尽力而为,但没有得到任何解决方案。请帮助解决这个问题。
提前致谢。
1.这是位于 session.php
中的会话处理代码<?php
class session{
public static function init(){
session_start();
}
public static function set($key,$value){
$_SESSION[$key] = $value;
}
public static function get($key){
if (isset($_SESSION[$key])) {
return $_SESSION[$key];
}
else{
return false;
}
}
public static function cheaksession(){
self::init();
if(self::get("login") == false){
self::destroy();
header("Location: login.php");
}
}
public static function destroy(){
session_destroy();
}
}
?>
2。这是位于 login.php
中的登录表单代码<?php
include "lib/session.php";
session::init();
?>
<?php include "lib/Database.php"; ?>
<?php include "helpers/format.php"; ?>
<?php
$db = new Database();
$fm = new format();
?>
<?php
$err = 0;
if ($_SERVER['REQUEST_METHOD'] == 'POST' ) {
$username = $fm->validation($_POST['username']);
$password = $fm->validation($_POST['password']);
$username = mysqli_real_escape_string($db->link,$username);
$password = mysqli_real_escape_string($db->link,$password);
if($username == 'fahad' && $password == '1234') {
session::set("login",true);
session::set("username",$username);
session::set("userId",1);
header("Location: index.php");
}
else{
$err = 1;
}
}
?>
3。这是用于会话检查的主页代码驻留在index.php
<?php
include "lib/session.php";
session::cheaksession();
?>
4.这是攻击的cURL代码
<?php
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,'http://localhost/Hackalgo/DummySite/index.php');
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
?>
通过执行此脚本,我正在抓取上面提到的 index.php 的 html 页面 ( 3).但是在 index.php (3) 中有一个会话检查器方法应该迫使我进入登录页面 login.php在(2)中提到。但它不起作用,index.php (3) 在登录页面 (2) 中未经任何身份验证就被抓取。
- curl 默认不遵循重定向。
- 在 cheaksession 调用之后,没有什么可以阻止 PHP 执行。
发送 Location 后调用 exit() 左右 header。