BioTorrents.de’s version of Gazelle
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

bans.php 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. <?php
  2. #declare(strict_types=1);
  3. $ENV = ENV::go();
  4. if (!check_perms('admin_manage_ipbans')) {
  5. error(403);
  6. }
  7. if (isset($_POST['submit'])) {
  8. authorize();
  9. $IPA = substr($_POST['start'], 0, strcspn($_POST['start'], '.'));
  10. if ($_POST['submit'] == 'Delete') { //Delete
  11. if (!is_number($_POST['id']) || $_POST['id'] == '') {
  12. error(0);
  13. }
  14. $DB->query('DELETE FROM ip_bans WHERE ID='.$_POST['id']);
  15. $Cache->delete_value('ip_bans_'.$IPA);
  16. } else { //Edit & Create, Shared Validation
  17. $Val->SetFields('start', '1', 'regex', 'You must include the starting IP address.', array('regex'=>'/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/i'));
  18. $Val->SetFields('end', '1', 'regex', 'You must include the ending IP address.', array('regex'=>'/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/i'));
  19. $Val->SetFields('notes', '1', 'string', 'You must include the reason for the ban.');
  20. $Err=$Val->ValidateForm($_POST); // Validate the form
  21. if ($Err) {
  22. error($Err);
  23. }
  24. $Notes = db_string($_POST['notes']);
  25. $Start = Tools::ip_to_unsigned($_POST['start']); //Sanitized by Validation regex
  26. $End = Tools::ip_to_unsigned($_POST['end']); //See above
  27. if ($_POST['submit'] == 'Edit') { //Edit
  28. if (empty($_POST['id']) || !is_number($_POST['id'])) {
  29. error(404);
  30. }
  31. $DB->query("
  32. UPDATE ip_bans
  33. SET
  34. FromIP=$Start,
  35. ToIP='$End',
  36. Reason='$Notes'
  37. WHERE ID='".$_POST['id']."'");
  38. } else { //Create
  39. $DB->query("
  40. INSERT INTO ip_bans
  41. (FromIP, ToIP, Reason)
  42. VALUES
  43. ('$Start','$End', '$Notes')");
  44. }
  45. $Cache->delete_value('ip_bans_'.$IPA);
  46. }
  47. }
  48. define('BANS_PER_PAGE', '20');
  49. list($Page, $Limit) = Format::page_limit(BANS_PER_PAGE);
  50. $sql = "
  51. SELECT
  52. SQL_CALC_FOUND_ROWS
  53. ID,
  54. FromIP,
  55. ToIP,
  56. Reason
  57. FROM ip_bans ";
  58. if (!empty($_REQUEST['notes'])) {
  59. $sql .= "WHERE Reason LIKE '%".db_string($_REQUEST['notes'])."%' ";
  60. }
  61. if (!empty($_REQUEST['ip']) && preg_match('/'.$ENV->IP_REGEX.'/', $_REQUEST['ip'])) {
  62. if (!empty($_REQUEST['notes'])) {
  63. $sql .= "AND '".Tools::ip_to_unsigned($_REQUEST['ip'])."' BETWEEN FromIP AND ToIP ";
  64. } else {
  65. $sql .= "WHERE '".Tools::ip_to_unsigned($_REQUEST['ip'])."' BETWEEN FromIP AND ToIP ";
  66. }
  67. }
  68. $sql .= "ORDER BY FromIP ASC";
  69. $sql .= " LIMIT ".$Limit;
  70. $Bans = $DB->query($sql);
  71. $DB->query('SELECT FOUND_ROWS()');
  72. list($Results) = $DB->next_record();
  73. $PageLinks = Format::get_pages($Page, $Results, BANS_PER_PAGE, 11);
  74. View::show_header('IP Address Bans');
  75. $DB->set_query_id($Bans);
  76. ?>
  77. <div class="header">
  78. <h2>IP Address Bans</h2>
  79. </div>
  80. <div>
  81. <form class="search_form" name="bans" action="" method="get">
  82. <table cellpadding="6" cellspacing="1" border="0" class="layout border" width="100%">
  83. <tr>
  84. <td class="label"><label for="ip">IP address:</label></td>
  85. <td>
  86. <input type="hidden" name="action" value="ip_ban" />
  87. <input type="search" id="ip" name="ip" size="20"
  88. value="<?=(!empty($_GET['ip']) ? display_str($_GET['ip']) : '')?>" />
  89. </td>
  90. <td class="label"><label for="notes">Notes:</label></td>
  91. <td>
  92. <input type="hidden" name="action" value="ip_ban" />
  93. <input type="search" id="notes" name="notes" size="60"
  94. value="<?=(!empty($_GET['notes']) ? display_str($_GET['notes']) : '')?>" />
  95. </td>
  96. <td>
  97. <input type="submit" value="Search" />
  98. </td>
  99. </tr>
  100. </table>
  101. </form>
  102. </div>
  103. <br />
  104. <h3>Manage</h3>
  105. <div class="linkbox">
  106. <?=$PageLinks?>
  107. </div>
  108. <table width="100%">
  109. <tr class="colhead">
  110. <td colspan="2">
  111. <span class="tooltip"
  112. title="The IP addresses specified are &#42;inclusive&#42;. The left box is the beginning of the IP address range, and the right box is the end of the IP address range.">Range</span>
  113. </td>
  114. <td>Notes</td>
  115. <td>Submit</td>
  116. </tr>
  117. <tr class="row">
  118. <form class="create_form" name="ban" action="" method="post">
  119. <input type="hidden" name="action" value="ip_ban" />
  120. <input type="hidden" name="auth"
  121. value="<?=$LoggedUser['AuthKey']?>" />
  122. <td colspan="2">
  123. <input type="text" size="12" name="start" />
  124. <input type="text" size="12" name="end" />
  125. </td>
  126. <td>
  127. <input type="text" size="72" name="notes" />
  128. </td>
  129. <td>
  130. <input type="submit" name="submit" value="Create" />
  131. </td>
  132. </form>
  133. </tr>
  134. <?php
  135. while (list($ID, $Start, $End, $Reason) = $DB->next_record()) {
  136. $Start = long2ip($Start);
  137. $End = long2ip($End); ?>
  138. <tr class="row">
  139. <form class="manage_form" name="ban" action="" method="post">
  140. <input type="hidden" name="id" value="<?=$ID?>" />
  141. <input type="hidden" name="action" value="ip_ban" />
  142. <input type="hidden" name="auth"
  143. value="<?=$LoggedUser['AuthKey']?>" />
  144. <td colspan="2">
  145. <input type="text" size="12" name="start"
  146. value="<?=$Start?>" />
  147. <input type="text" size="12" name="end" value="<?=$End?>" />
  148. </td>
  149. <td>
  150. <input type="text" size="72" name="notes"
  151. value="<?=$Reason?>" />
  152. </td>
  153. <td>
  154. <input type="submit" name="submit" value="Edit" />
  155. <input type="submit" name="submit" value="Delete" />
  156. </td>
  157. </form>
  158. </tr>
  159. <?php
  160. }
  161. ?>
  162. </table>
  163. <div class="linkbox">
  164. <?=$PageLinks?>
  165. </div>
  166. <?php View::show_footer();