index.php 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. <?php
  2. error_reporting(E_ALL);
  3. class db extends mysqli {
  4. private $host = 'localhost';
  5. private $user = 'ban';
  6. private $pass = 'Blubb123-';
  7. private $db = 'ban';
  8. public function __construct() {
  9. @parent::__construct($this->host, $this->user, $this->pass, $this->db);
  10. if($this->connect_errno){
  11. die($this->connect_error);
  12. }
  13. $this->set_charset('utf8');
  14. }
  15. }
  16. class token {
  17. private $db = null;
  18. public function __construct() {
  19. $this->db = new db();
  20. }
  21. private function getRole($token) {
  22. $dbAction = $this->db->prepare("SELECT role FROM clients WHERE token = ?");
  23. $dbAction->bind_param('s',$token);
  24. $dbAction->execute();
  25. $dbAction->store_result();
  26. $dbAction->bind_result($role);
  27. $dbAction->fetch();
  28. if ($dbAction->num_rows() == 1){
  29. return $role;
  30. }
  31. return false;
  32. }
  33. public function isAdmin($token) {
  34. if($this->getRole($token) == 'admin') {
  35. return true;
  36. }
  37. return false;
  38. }
  39. public function isClient($token) {
  40. if($this->getRole($token) == 'client') {
  41. return true;
  42. }
  43. return false;
  44. }
  45. }
  46. class action {
  47. public function __construct() {
  48. $this->db = new db();
  49. }
  50. private function isListed($ip) {
  51. $dbAction = $this->db->prepare("SELECT ip FROM list WHERE ip = ?");
  52. $dbAction->bind_param('i',$ip);
  53. $dbAction->execute();
  54. $dbAction->store_result();
  55. if($dbAction->num_rows() == 0) {
  56. return false;
  57. }
  58. return true;
  59. }
  60. private function deListCount($ip) {
  61. $dbAction = $this->db->prepare("SELECT count FROM delist WHERE ip = ?");
  62. $dbAction->bind_param('i',$ip);
  63. $dbAction->execute();
  64. $dbAction->store_result();
  65. $dbAction->bind_result($count);
  66. $dbAction->fetch();
  67. return $count;
  68. }
  69. public function list($ip) {
  70. $dbAction = $this->db->prepare("INSERT IGNORE INTO list VALUES (?)");
  71. $dbAction->bind_param('i',$ip);
  72. return $dbAction->execute();
  73. }
  74. public function deList($ip) {
  75. if(!$this->isListed($ip)) { //set true to avoid discovering
  76. return true;
  77. }
  78. //check delisting count
  79. if ($this->delistCount($ip) > 3){
  80. echo "Fatal: ". long2ip($ip) . " delisted to often!\n";
  81. return false;
  82. }
  83. //delist ip
  84. $dbAction = $this->db->prepare("DELETE FROM list WHERE ip = ?");
  85. $dbAction->bind_param('i',$ip);
  86. $dbAction->execute();
  87. //update delist count
  88. $dbAction = $this->db->prepare("INSERT INTO delist (ip) VALUES (?) ON DUPLICATE KEY UPDATE count = count + 1");
  89. $dbAction->bind_param('i',$ip);
  90. $dbAction->execute();
  91. return true;
  92. }
  93. public function blackList($ip) {
  94. $this->deWhiteList($ip);
  95. $dbAction = $this->db->prepare("INSERT IGNORE INTO blacklist VALUES (?)");
  96. $dbAction->bind_param('i',$ip);
  97. return $dbAction->execute();
  98. }
  99. public function deBlackList($ip) {
  100. $dbAction = $this->db->prepare("DELETE FROM blacklist WHERE ip = (?)");
  101. $dbAction->bind_param('i',$ip);
  102. return $dbAction->execute();
  103. }
  104. public function whiteList($ip) {
  105. $this->deBlackList($ip);
  106. $dbAction = $this->db->prepare("INSERT IGNORE INTO whitelist VALUES (?)");
  107. $dbAction->bind_param('i',$ip);
  108. return $dbAction->execute();
  109. }
  110. public function deWhiteList($ip) {
  111. $dbAction = $this->db->prepare("DELETE FROM whitelist WHERE ip = (?)");
  112. $dbAction->bind_param('i',$ip);
  113. return $dbAction->execute();
  114. }
  115. }
  116. $ip = ip2long(substr(trim($_GET['ip']),0,15));
  117. $token = substr(trim($_GET['token']),0,25);
  118. $action = substr(trim($_GET['action']),0,9);
  119. switch($action) {
  120. case 'delist':
  121. if((new action)->delist($ip)){
  122. echo long2ip($ip) . " delisted\n";
  123. } else {
  124. echo long2ip($ip) . " not delisted\n";
  125. };
  126. break;
  127. case 'blacklist':
  128. if ((new token)->isAdmin($token)){
  129. if((new action)->blackList($ip)){
  130. echo " blacklisted " . long2ip($ip) ."\n";
  131. } else {
  132. echo " fehler\n";
  133. };
  134. } else {
  135. echo "no admin permissions\n";
  136. };
  137. break;
  138. case 'whitelist':
  139. if ((new token)->isAdmin($token)){
  140. if((new action)->whiteList($ip)){
  141. echo " whitelisted " . long2ip($ip) ."\n";
  142. } else {
  143. echo " fehler\n";
  144. };
  145. } else {
  146. echo "no admin permissions\n";
  147. };
  148. break;
  149. default:
  150. if ((new checkToken)->isClient($token)){
  151. if((new action)->list($ip)){
  152. echo " inserted " . long2ip($ip) ."\n";
  153. } else {
  154. echo " fehler\n";
  155. };
  156. } else {
  157. echo "Client token " . $token . " not registered\n";
  158. };
  159. }