我刚刚收到一个网站来管理,但是我不太清楚上一个人写的代码.我正在粘贴下面的登录过程,你可以看看,告诉我有没有安全漏洞?乍看起来,似乎可以通过sql注入或操纵cookie和?m =参数进入.

define ( 'CURRENT_TIME',time ()); / / Current time. 
define ( 'ONLINE_TIME_MIN',(CURRENT_TIME - BOTNET_TIMEOUT)); / / Minimum time for the status of "Online". 
define ( 'DEFAULT_LANGUAGE','en'); / / Default language. 
define ( 'THEME_PATH','theme'); / / folder for the theme. 

/ / HTTP requests. 
define ( 'QUERY_SCRIPT',basename ($_SERVER [ 'PHP_SELF'])); 
define ( 'QUERY_SCRIPT_HTML',QUERY_SCRIPT); 
define ( 'QUERY_VAR_MODULE','m'); / / variable contains the current module. 
define ( 'QUERY_STRING_BLANK',QUERY_SCRIPT. '? m ='); / / An empty query string. 
define ( 'QUERY_STRING_BLANK_HTML',QUERY_SCRIPT_HTML. '? m ='); / / Empty query string in HTML. 
define ( 'CP_HTTP_ROOT',str_replace ( '\ \','/',(! empty ($_SERVER [ 'SCRIPT_NAME'])? dirname ($_SERVER [ 'SCRIPT_NAME']):'/'))); / / root of CP. 

/ / The session cookie. 
define ( 'COOKIE_USER','p'); / / Username in the cookies. 
define ( 'COOKIE_PASS','u'); / / user password in the cookies. 
define ( 'COOKIE_LIVETIME',CURRENT_TIME + 2592000) / / Lifetime cookies. 
define ( 'COOKIE_SESSION','ref'); / / variable to store the session. 
define ( 'SESSION_LIVETIME',CURRENT_TIME + 1300) / / Lifetime of the session. 

////////////////////////////////////////////////// ///////////////////////////// 
/ / Initialize. 
////////////////////////////////////////////////// ///////////////////////////// 

/ / Connect to the database. 
if (! ConnectToDB ()) die (MysqL_error_ex ()); 

/ / Connecting topic. 
require_once (THEME_PATH. '/ index.PHP'); 

/ / Manage login. 
if (! empty ($_GET [QUERY_VAR_MODULE])) 
( 
  / / Login form. 
  if (strcmp ($_GET [QUERY_VAR_MODULE],'login') === 0) 
  ( 
    UnlockSessionAndDestroyAllCokies (); 

    if (isset ($_POST [ 'user']) & & isset ($_POST [ 'pass'])) 
    ( 
      $user = $_POST [ 'user']; 
      $pass = md5 ($_POST [ 'pass']); 

      / / Check login. 
      if (@ MysqL_query ( "SELECT id FROM cp_users WHERE name = '". addslashes ($user). "' AND pass = '". addslashes ($pass). "' AND flag_enabled = '1 'LIMIT 1") & & @ MysqL_affected_rows () == 1) 
      ( 
        if (isset ($_POST [ 'remember']) & & $_POST [ 'remember'] == 1) 
        ( 
          setcookie (COOKIE_USER,md5 ($user),COOKIE_LIVETIME,CP_HTTP_ROOT); 
          setcookie (COOKIE_PASS,$pass,CP_HTTP_ROOT); 
        ) 

        LockSession (); 
        $_SESSION [ 'Name'] = $user; 
        $_SESSION [ 'Pass'] = $pass; 
        / / UnlockSession (); 

        header ( 'Location:'. QUERY_STRING_BLANK. 'home'); 
      ) 
      else ShowLoginForm (true); 
      die (); 
    ) 

    ShowLoginForm (false); 
    die (); 
  ) 

  / / Output 
  if (strcmp ($_GET [ 'm'],'logout') === 0) 
  ( 
    UnlockSessionAndDestroyAllCokies (); 
    header ( 'Location:'. QUERY_STRING_BLANK. 'login'); 
    die (); 
  ) 
) 

////////////////////////////////////////////////// ///////////////////////////// 
/ / Check the login data. 
////////////////////////////////////////////////// ///////////////////////////// 

$logined = 0,/ / flag means,we zalogininy. 

/ / Log in session. 
LockSession (); 
if (! empty ($_SESSION [ 'name']) & &! empty ($_SESSION [ 'pass'])) 
( 
  if (($r = @ MysqL_query ( "SELECT * FROM cp_users WHERE name = '". addslashes ($_SESSION [' name'])."' AND pass = ' ". addslashes ($_SESSION [' pass']). " 'AND flag_enabled = '1' LIMIT 1 ")))$logined = @ MysqL_affected_rows (); 
) 
/ / Login through cookies. 
if ($logined! == 1 & &! empty ($_COOKIE [COOKIE_USER]) & &! empty ($_COOKIE [COOKIE_PASS])) 
( 
  if (($r = @ MysqL_query ( "SELECT * FROM cp_users WHERE MD5 (name )='". addslashes ($_COOKIE [COOKIE_USER ])."' AND pass = '". addslashes ($_COOKIE [COOKIE_PASS]). " 'AND flag_enabled = '1' LIMIT 1 ")))$logined = @ MysqL_affected_rows (); 
) 
/ / Unable to login. 
if ($logined! == 1) 
( 
  UnlockSessionAndDestroyAllCokies (); 
  header ( 'Location:'. QUERY_STRING_BLANK. 'login'); 
  die (); 
) 

/ / Get the user data. 
$_USER_DATA = @ MysqL_fetch_assoc ($r); 
if ($_USER_DATA === false) die (MysqL_error_ex ()); 
$_SESSION [ 'Name'] = $_USER_DATA [ 'name']; 
$_SESSION [ 'Pass'] = $_USER_DATA [ 'pass']; 

/ / Connecting language. 
if (@ strlen ($_USER_DATA [ 'language'])! = 2 | |! SafePath ($_USER_DATA [ 'language']) | |! file_exists ( 'system / lng .'.$_ USER_DATA [' language '].' . PHP'))$_ USER_DATA [ 'language'] = DEFAULT_LANGUAGE; 
require_once ( 'system / lng .'.$_ USER_DATA [' language'].'. PHP '); 

UnlockSession (); 
是的,这段代码有一些漏洞.

这可能是一个问题:

define ( 'QUERY_SCRIPT',basename ($_SERVER [ 'PHP_SELF']));

PHP_SELF是坏的,因为攻击者可以控制这个变量.例如,当您使用此URL访问脚本时尝试打印PHP_SELF:http://localhost/index.PHP/test/junk/hacked.尽可能避免使用此变量,如果您使用它,请确保对其进行消毒.在使用此变量时看到XSS出现是非常常见的.

第一漏洞:

setcookie (COOKIE_USER,CP_HTTP_ROOT); 
setcookie (COOKIE_PASS,CP_HTTP_ROOT);

这是一个相当严重的漏洞.如果攻击者在您的应用程序中注入sql,那么他们可以立即获取md5哈希和用户名,并立即登录,而不必打破md5()哈希.就好像你用明文存储密码一样.

这个会话漏洞是两倍,它也是一个“不朽的会话”,Session id必须始终是大的随机生成的值到期.如果他们不到期,那么他们更容易暴力.

您应该永远不要重新发明轮子,在应用程序开始时调用session_start(),这将自动生成一个到期的安全会话ID.然后使用$_SESSION [‘user’]之类的会话变量来跟踪浏览器是否实际登录.

第二个漏洞:

$pass = md5 ($_POST [ 'pass']);

md5()被证明是不安全的,因为有意产生冲突. md5()不应该用于密码.您应该使用sha2系列的成员,sha-256或sha-512是很好的选择.

第3漏洞:

CSRF

我没有看到任何CSRF保护您的身份验证逻辑.我怀疑您应用中的所有请求都容易受到CSRF的影响.

这个PHP代码是否有安全漏洞?的更多相关文章

  1. HTML5 Web缓存和运用程序缓存(cookie,session)

    这篇文章主要介绍了HTML5 Web缓存和运用程序缓存(cookie,session),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  2. 关于h5中的fetch方法解读(小结)

    这篇文章主要介绍了关于h5中的fetch方法解读(小结),fetch身为H5中的一个新对象,他的诞生,是为了取代ajax的存在而出现,有兴趣的可以了解一下

  3. iOS Swift上弃用后Twitter.sharedInstance().session()?. userName的替代方案

    解决方法如果您仍在寻找解决方案,请参阅以下内容:

  4. 使用Fabric SDK iOS访问Twitter用户时间线

    我试图在这个问题上挣扎两天.我正在使用FabricSDK和Rest工具包,试图为Twitter使用不同的RestAPIWeb服务.我可以使用具有authTokenSecret,authToken和其他值的会话对象的TWTRLogInButton成功登录.当我尝试获取用户时间线时,我总是得到失败的响应,作为:{“errors”:[{“code”:215,“message”:“BadAuthentic

  5. ios – 如何在Swift中手动为UIWebView设置Cookie

    我需要在swift中为webview设置一个cookie.我找到了一个解决方案,但它是针对objective-c的.如何在Swift中做到这一点?

  6. ios – 如何从Apple Watch调用iPhone上定义的方法

    有没有办法从Watchkit扩展中调用iPhone上的类中定义的方法?根据我的理解,目前在Watchkit和iPhone之间进行本地通信的方法之一是使用NSUserDefaults,但还有其他方法吗?

  7. 通过在iOS中处理cookie来维护会话信息

    我是iOS开发的新手.我正在使用NSURLSession来管理会话信息.下面是我用来调用任何服务器API的示例代码,我的申请流程是,如果没有登录–>登录(呼叫登录api)Else转到主屏幕并调用其他API.我的问题是,一旦从内存中删除应用程序,会话信息就不会被维护,我不得不再次调用Login.我的要求就像Facebook一样,用户只需登录一次,并且在下次应用程序启动时保持会话.编辑:我想我必须通过

  8. ios – 以http无效的自定义URL方案开头

    我在应用程序中使用了自定义URL方案.我成功地从safari重定向到我的应用程序.就像我已经制作了URL方案“appname”.请检查http://prntscr.com/2cjx0p.我需要使用像iosurlredirectfrommailtoapp这样的解决方案,但我不确定如何设置cookie.我发现我必须首先在我的应用程序中为服务器“http://myappname.com”设置一个cook

  9. ios – 如何将视频从AVAssetExportSession保存到相机胶卷?

    在此先感谢您的帮助.解决方法只需使用session.outputURL=…

  10. ios – 使用AVCaptureSession sessionPreset = AVCaptureSessionPresetPhoto拉伸捕获的照片

    解决方法所以我解决了我的问题.这是我现在使用的代码,它工作正常:…重要的输出imagaView:一些额外的信息:相机图层必须是全屏,并且outputimageView也必须是.我希望这些对某些人来说也是有用的信息.

随机推荐

  1. PHP个人网站架设连环讲(一)

    先下一个OmnihttpdProffesinalV2.06,装上就有PHP4beta3可以用了。PHP4给我们带来一个简单的方法,就是使用SESSION(会话)级变量。但是如果不是PHP4又该怎么办?我们可以假设某人在15分钟以内对你的网页的请求都不属于一个新的人次,这样你可以做个计数的过程存在INC里,在每一个页面引用,访客第一次进入时将访问时间送到cookie里。以后每个页面被访问时都检查cookie上次访问时间值。

  2. PHP函数学习之PHP函数点评

    PHP函数使用说明,应用举例,精简点评,希望对您学习php有所帮助

  3. ecshop2.7.3 在php5.4下的各种错误问题处理

    将方法内的函数,分拆为2个部分。这个和gd库没有一点关系,是ecshop程序的问题。会出现这种问题,不外乎就是当前会员的session或者程序对cookie的处理存在漏洞。进过本地测试,includes\modules\integrates\ecshop.php这个整合自身会员的类中没有重写integrate.php中的check_cookie()方法导致,验证cookie时返回的username为空,丢失了登录状态,在ecshop.php中重写了此方法就可以了。把他加到ecshop.php的最后面去就可

  4. NT IIS下用ODBC连接数据库

    $connection=intodbc_connect建立数据库连接,$query_string="查询记录的条件"如:$query_string="select*fromtable"用$cur=intodbc_exec检索数据库,将记录集放入$cur变量中。再用while{$var1=odbc_result;$var2=odbc_result;...}读取odbc_exec()返回的数据集$cur。最后是odbc_close关闭数据库的连接。odbc_result()函数是取当前记录的指定字段值。

  5. PHP使用JpGraph绘制折线图操作示例【附源码下载】

    这篇文章主要介绍了PHP使用JpGraph绘制折线图操作,结合实例形式分析了php使用JpGraph的相关操作技巧与注意事项,并附带源码供读者下载参考,需要的朋友可以参考下

  6. zen_cart实现支付前生成订单的方法

    这篇文章主要介绍了zen_cart实现支付前生成订单的方法,结合实例形式详细分析了zen_cart支付前生成订单的具体步骤与相关实现技巧,需要的朋友可以参考下

  7. Thinkphp5框架实现获取数据库数据到视图的方法

    这篇文章主要介绍了Thinkphp5框架实现获取数据库数据到视图的方法,涉及thinkPHP5数据库配置、读取、模型操作及视图调用相关操作技巧,需要的朋友可以参考下

  8. PHP+jquery+CSS制作头像登录窗(仿QQ登陆)

    本篇文章介绍了PHP结合jQ和CSS制作头像登录窗(仿QQ登陆),实现了类似QQ的登陆界面,很有参考价值,有需要的朋友可以了解一下。

  9. 基于win2003虚拟机中apache服务器的访问

    下面小编就为大家带来一篇基于win2003虚拟机中apache服务器的访问。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  10. Yii2中组件的注册与创建方法

    这篇文章主要介绍了Yii2之组件的注册与创建的实现方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下

返回
顶部