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

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

@카이루 감사합니다.

게시글 목록

번호 제목
17591
17590
17589
17588
17587
17584
17583
17582
17581
17579
17577
17575
17574
17573
17572
17569
17564
17560
17559
17555
17554
17553
17552
17549
17548
17547
17542
17533
17531
17524