2026, 새로운 도약을 시작합니다.

아이피 위치추적 (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 주소";
    }
 

@카이루 감사합니다.

댓글 작성

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

로그인하기

개발자팁

개발과 관련된 유용한 정보를 공유하세요.
질문은 QA에서 해주시기 바랍니다.
번호 분류 제목 글쓴이 날짜 조회
5402 MySQL 6일 전 조회 22
5401 JavaScript 3주 전 조회 117
5400 MySQL 1개월 전 조회 224
5399 PHP 2개월 전 조회 470
5398 PHP 2개월 전 조회 354
5397 PHP 2개월 전 조회 286
5396 기타 5개월 전 조회 560
5395 PHP 6개월 전 조회 1,197
5394 MySQL 7개월 전 조회 794
5393 웹서버 9개월 전 조회 986
5392 1년 전 조회 1,311
5391 11개월 전 조회 1,320
5390 11개월 전 조회 1,114
5389 10개월 전 조회 1,032
5388 10개월 전 조회 1,171
5387 9개월 전 조회 963
5386 JavaScript 9개월 전 조회 1,150
5385 웹서버 9개월 전 조회 1,170
5384 JavaScript 10개월 전 조회 992
5383 기타 11개월 전 조회 1,417
5382 기타 11개월 전 조회 661
5381 JavaScript 11개월 전 조회 1,077
5380 기타 11개월 전 조회 834
5379 JavaScript 11개월 전 조회 832
5378 1년 전 조회 1,399
5377 기타 1년 전 조회 941
5376 jQuery 1년 전 조회 641
5375 jQuery 1년 전 조회 872
5374 기타 1년 전 조회 950
5373 MySQL 1년 전 조회 982
🐛 버그신고