Advertisement
Guest User

Untitled

a guest
Aug 5th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 3.09 KB | None | 0 0
  1. #!/usr/bin/perl
  2.  
  3. #use strict;
  4. use warnings;
  5. use CGI;
  6. use DBI;
  7. use CGI::Session;
  8. use CGI::Session::Driver::mysql;
  9. use Digest::MD5 qw/md5_hex/;
  10.  
  11. ### subs
  12. sub db_connect {
  13.     open(CONF, shift || "./config.txt") || return 0;
  14.         # read config file
  15.         @a = <CONF>;
  16.         chomp @a;
  17.         my ($dbhost, $dbuser, $dbpass, $dbname) = @a;
  18.     close CONF;
  19.     $k = DBI->connect("DBI:mysql:$dbname;host=$dbhost", $dbuser, $dbpass);
  20.     return $k;
  21. }
  22. sub db_query {
  23.     $q = $kapcs->prepare(shift);
  24.     $q->execute();
  25.     while($row = $q->fetchrow_hashref()) {
  26.         push @ret, \%$row;
  27.     }
  28.     return @ret;
  29. }
  30. sub check_login {
  31.     $nev = shift; $nev =~ s/'/\\'/;     # avoid sql injection
  32.     $pass = shift; $pass = md5_hex $pass;
  33.     $kapcs = db_connect;
  34.     $q = $kapcs->prepare("SELECT uid FROM users WHERE nev='$nev' AND pass='$pass'");
  35.     $q->execute();
  36.     $row = $q->fetchrow_hashref();
  37.     return $row->{uid};
  38. }
  39. sub session_start {
  40.     open(CONF, shift || "./config.txt") || return 0;
  41.         # read config file
  42.         @a = <CONF>;
  43.         chomp @a;
  44.         my ($dbhost, $dbuser, $dbpass, $dbname) = @a;
  45.     close CONF;
  46.     $session = CGI::Session->new("driver:mysql", undef, {DataSource => "DBI:mysql:$dbname;host=$dbhost", User => $dbuser, Password => $dbpass});
  47.     $session->expire(shift || '+30m');
  48.     #return CGI::Cookie->new(-name=>$session->name, -value=>$session->id, -path=>shift||'/');
  49.     return $session;
  50. }
  51. sub session_stop {
  52.     $session->delete();
  53.     $session->flush();
  54. }
  55. sub session_set {
  56.     # takes: string1 string2
  57.     $session->param(shift, shift);
  58.     $session->flush();
  59. }
  60. sub session_get {
  61.     # takes: string
  62.     # returns: value of variable represented by string
  63.     return $session->param(shift);
  64. }
  65. sub form_read {
  66.     if($ENV{REQUEST_METHOD} =~ /GET/i) {
  67.         $q = $ENV{QUERY_STRING};
  68.         @pairs = split(/&/, $q);
  69.         foreach $pair (@pairs) {
  70.             ($var, $val) = split(/=/, $pair);
  71.             $val =~ tr/+/ /;
  72.             $val =~ s/%(..)/pack("C", hex($1))/eg;
  73.             $form{$var} = $val;
  74.         }
  75.     } elsif($ENV{REQUEST_METHOD} =~ /POST/i) {
  76.         #read(STDIN, $q, $ENV{CONTENT_LENGTH});
  77.         foreach $field ($cgi->param()) {
  78.             $form{$field} = $cgi->param($field);
  79.         }
  80.     }
  81.     return %form;
  82. }
  83. ### end subs
  84.  
  85. ### globals
  86. our $session = 0;
  87. our $cgi=CGI->new();
  88. our %form;
  89. ### end globals
  90.  
  91. ### headers
  92. $session = CGI::Session->load();
  93. if($session->is_expired()) {
  94.     $session->delete();
  95. }
  96. if(not $session or $session->is_empty()) {
  97.     $session = session_start;
  98. } else {
  99. }
  100. print $cgi->header(-type, "text/html", -charset, "UTF-8", -cookie, CGI::Cookie->new(-name=>$session->name, -value=>$session->id));
  101. ### end headers
  102.  
  103. ## read GET/POST variables
  104. %form = form_read;
  105.  
  106.  
  107. if(not $session->is_empty() and session_get("uid")) {
  108.     ### MAIN PART
  109.     $email = session_get("email");
  110.     $nev = session_get("nev");
  111.  
  112.  
  113.     if($kapcs = db_connect()) {
  114.         @rows = db_query "SELECT uid,email,nev FROM users";
  115.         foreach my $row1 (@rows) {
  116.             foreach my $col1 (keys %$row1) {
  117.                 print " | ".$row1->{$col1}."";
  118.             }
  119.             print "\n";
  120.         }
  121.     } else {
  122.         die "Error: $DBI::errstr";
  123.     }
  124.    
  125.     ### END MAIN PART
  126.  
  127. } else {
  128.     if($form{nev}) {
  129.         if($uid = check_login $form{nev}, $form{pass} ) {
  130.             session_set 'uid', $uid;
  131.             print "logged in";
  132.         } else {
  133.             # incorrect login/pass
  134.             print "incorrect";
  135.         }
  136.     } else {
  137.         # login screen
  138.         print "please login!";
  139.     }
  140. }
  141. print "\n";
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement