auth_export.php 3.6 KB

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