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

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

· 4개월 전 · 797 · 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 주소";
    }
 

@카이루 감사합니다.

게시글 목록

번호 제목
17191
17162
17160
17158
17156
17155
17153
17151
17145
17135
17131
17125
17114
17107
17099
17096
17089
17088
17082
17079
17078
17077
17070
17068
17067
17063
17060
17048
17045
17044