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

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

· 4개월 전 · 802 · 2

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개

4개월 전

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

 

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

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

 

예를 들면

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

@카이루 감사합니다.

게시글 목록

번호 제목
17316
17315
17313
17312
17305
17304
17298
17294
17291
17285
17284
17279
17272
17271
17270
17262
17255
17248
17241
17238
17236
17220
17217
JavaScript 회원가입 2
17216
17214
17207
17205
17203
17201
17198