auth_export.php 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. <?php
  2. require_once($_SERVER['DOCUMENT_ROOT'] . "/inc/auth.php");
  3. require_once($_SERVER['DOCUMENT_ROOT'] . "/inc/languages/" . HTML_LANG . ".php");
  4. if (!defined("CONFIG")) die("Not defined");
  5. $page_url = null;
  6. if (isset($_POST["ExportAuth"])) {
  7. // Устанавливаем правильный Content-Type для CSV
  8. header('Content-Type: text/csv; charset=utf-8');
  9. header('Content-Disposition: attachment; filename="auth_export.csv"');
  10. $out = fopen('php://output', 'w');
  11. fputcsv($out, ['login', 'ip', 'mac', 'description', 'dns name', 'last_found', 'connected'], ';');
  12. if (!empty($_POST["a_selected"]) && (int)$_POST["a_selected"]) {
  13. // Export selected only
  14. $auth_ids = $_POST["fid"] ?? [];
  15. $valid_ids = [];
  16. // Фильтруем и приводим к целым числам
  17. foreach ($auth_ids as $id) {
  18. if ($id = (int)$id) {
  19. $valid_ids[] = $id;
  20. }
  21. }
  22. if (!empty($valid_ids)) {
  23. // Создаем плейсхолдеры для IN
  24. $placeholders = str_repeat('?,', count($valid_ids) - 1) . '?';
  25. $sql = "
  26. SELECT
  27. ul.login,
  28. ua.ip,
  29. ua.mac,
  30. ua.description,
  31. ua.dns_name,
  32. ua.last_found,
  33. ua.id
  34. FROM user_auth ua
  35. JOIN user_list ul ON ua.user_id = ul.id
  36. WHERE ua.id IN ($placeholders)
  37. ";
  38. $records = get_records_sql($db_link, $sql, $valid_ids);
  39. foreach ($records as $record) {
  40. fputcsv($out, [
  41. $record['login'],
  42. $record['ip'],
  43. $record['mac'],
  44. $record['description'],
  45. $record['dns_name'],
  46. $record['last_found'],
  47. get_connection_string($db_link, $record['id'])
  48. ], ';');
  49. }
  50. }
  51. } else {
  52. // Export all
  53. $conditions = ["ua.deleted = 0"];
  54. $params = [];
  55. // Фильтр по IP (если передан как часть WHERE условия)
  56. // Безопасная сортировка - белый список разрешенных полей
  57. $allowed_sort_fields = [
  58. 'user_auth.ip_int', 'ua.ip_int',
  59. 'user_auth.ip', 'ua.ip',
  60. 'user_auth.mac', 'ua.mac',
  61. 'user_list.login', 'ul.login',
  62. 'ua.last_found'
  63. ];
  64. $sort_field = 'ua.ip_int';
  65. if (!empty($_POST["ip-sort"]) && in_array($_POST["ip-sort"], $allowed_sort_fields, true)) {
  66. $sort_field = $_POST["ip-sort"];
  67. }
  68. $sql = "
  69. SELECT
  70. ua.*,
  71. ul.login,
  72. ul.enabled as UEnabled,
  73. ul.blocked as UBlocked,
  74. ua.id
  75. FROM user_auth ua
  76. JOIN user_list ul ON ua.user_id = ul.id
  77. WHERE " . implode(' AND ', $conditions) . "
  78. ORDER BY $sort_field
  79. ";
  80. $records = get_records_sql($db_link, $sql, $params);
  81. foreach ($records as $record) {
  82. fputcsv($out, [
  83. $record['login'],
  84. $record['ip'],
  85. $record['mac'],
  86. $record['description'],
  87. $record['dns_name'],
  88. $record['last_found'],
  89. get_connection_string($db_link, $record['id'])
  90. ], ';');
  91. }
  92. }
  93. fclose($out);
  94. exit;
  95. }
  96. ?>