테스트 사이트 - 개발 중인 베타 버전입니다

아이피 위치추적 (ISP 위치 정보)

2009420018_1750167579.2892.jpg







 

function get_ipinfo($ip)
{
    if ($ip == "") return false;

    $sql = "SELECT * FROM typing_ipinfo WHERE ii_ip = '".$ip."'";
    $row = sql_fetch($sql);

    if ($row) {
        $data = json_decode($row['ii_info'], true);
    } else {
        // 외부 API 호출
        $url = 'https://ipinfo.io/'.$ip.'/json?token=';

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_TIMEOUT, 10);

        $response = curl_exec($ch);
        $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        curl_close($ch);

        if ($httpCode != 200 || !$response) {
            return false;
        }

        $data = json_decode($response, true);
        $escaped_response = addslashes($response);

        $sql = "INSERT INTO typing_ipinfo 
                SET ii_ip = '".$ip."', ii_info = '".$escaped_response."', ii_datetime = '".G5_TIME_YMDHIS."'";
        sql_query($sql, false);
    }

    if (!isset($data['region']) || !isset($data['city']) || !isset($data['loc'])) {
        return "위치 정보 없음";
    }

    $region = htmlspecialchars($data['region'], ENT_QUOTES, 'UTF-8');
    $city = htmlspecialchars($data['city'], ENT_QUOTES, 'UTF-8');
    $loc = htmlspecialchars($data['loc'], ENT_QUOTES, 'UTF-8');

    $str = $region . " " . $city . " ";
    $str .= "<a href='https://maps.google.com/?q={$loc}&ll={$loc}&z=8' target='_blank'>(map)</a>";
    return $str;
}
 

 

 

 

 


https://ipinfo.io


2009420018_1750167678.0075.jpg








CREATE TABLE `typing_ipinfo` (
  `ii_idx` int(11) NOT NULL AUTO_INCREMENT,
  `ii_ip` varchar(45) NOT NULL,
  `ii_info` text NOT NULL,
  `ii_datetime` datetime NOT NULL,
  PRIMARY KEY (`ii_idx`),
  UNIQUE KEY `ii_ip` (`ii_ip`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;








<?php echo get_ipinfo($row['ip']); ?>










[광고] 추억 속 타자 연습, 다시 시작해볼까요? - https://김타자.kr 



 

댓글 작성

댓글을 작성하시려면 로그인이 필요합니다.

로그인하기

댓글 2개

SQL 인젝션 취약점이 눈에 보입니다.

 

 $sql = "SELECT * FROM typing_ipinfo WHERE ii_ip = '".$ip."'";
ip 값을 받아오는데  ' update ... admin  비번 변경 명령어 들어가면

관리자 아이디 비번 변경이 가능하니 패치를 하는걸 권장합니다.

 

예를 들면

    if (empty($ip) || !filter_var($ip, FILTER_VALIDATE_IP)) {
        return "유효하지 않은 IP 주소";
    }
 

@카이루 감사합니다.

게시글 목록

번호 제목
17523
17516
17515
17514
17498
17493
17490
17487
17485
17481
17478
17477
17474
17473
17472
17470
17469
17463
17462
17461
17460
17458
17457
17454
17453
17448
17447
17446
17445
17444