아이피 위치추적 (ISP 위치 정보) 정보
PHP 아이피 위치추적 (ISP 위치 정보)관련링크
본문
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
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
0
댓글 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 주소";
}
@카이루 감사합니다.