API định vị địa lý W3C
Rủi ro về quyền riêng tư của Công nghệ thịnh hành
Một trong những tính năng nổi bật hơn của HTML 5 là API vị trí địa lý. API vị trí địa lý cung cấp quyền truy cập vào thông tin vị trí địa lý được liên kết với thiết bị của người dùng cuối. Trước khi W3C ( World Wide Web Consortium ) chuẩn hóa API định vị địa lý, rất khó để truy cập thông tin này và điều này thường yêu cầu các tiện ích mở rộng của bên thứ ba.
Mặc dù phương pháp định vị địa lý được tiêu chuẩn hóa này rất thú vị và cung cấp cho các nhà phát triển web một quy trình đơn giản hơn để làm cho các ứng dụng trở nên đổi mới hơn và có lợi hơn cho những người sử dụng các ứng dụng đó, nhưng cũng có một rủi ro tiềm ẩn về quyền riêng tư liên quan đến API định vị địa lý.
Một trình duyệt hỗ trợ Geo IP — gần như tất cả các trình duyệt web hiện đại ngày nay — sẽ yêu cầu sự cho phép của người dùng cuối trước khi cung cấp thông tin này cho trang web. Thông tin định vị địa lý bắt nguồn từ API chủ yếu liên quan đến thông tin về kinh độ và vĩ độ hiện tại của thiết bị. Trong hầu hết các bài kiểm tra, thông tin này rất gần với vị trí của một người và trong một số trường hợp, đó là vị trí chính xác!
API vị trí địa lý của W3C xác định giao diện cấp cao cho thông tin vị trí của thiết bị người dùng cuối và sau đó cung cấp thông tin này — với sự cho phép của người dùng — cho trang web yêu cầu. Các nguồn thông tin vị trí quen thuộc bao gồm Hệ thống định vị toàn cầu (GPS) và vị trí được suy ra từ các tín hiệu mạng như địa chỉ IP, RFID, Wi-Fi, địa chỉ MAC Bluetooth, ID di động GSM/CDMA và đầu vào của người dùng. [ 1 ][ 7 ]
Hầu hết các trình duyệt kết hợp các manh mối như địa chỉ IP của một người, thông tin tác nhân người dùng trình duyệt và danh sách các mạng Wi-Fi được phát hiện gần đó, cùng với cường độ tín hiệu của chúng, để ước tính vị trí của một người. API cũng tận dụng thông tin GPS trên thiết bị nếu thiết bị có GPS để cung cấp thông tin dựa trên vị trí chính xác hơn.
Ví dụ: một trường hợp sử dụng hợp pháp mà loại thông tin này sẽ cần thiết là trang web giao đồ ăn hoặc trang web gọi taxi. Tuy nhiên, quyền riêng tư trở thành một vấn đề khi các trang web yêu cầu thông tin này mà không có lý do chính đáng để yêu cầu thông tin đó. Chẳng hạn, đôi khi trang web chỉ cần vị trí địa lý so với quốc gia xuất xứ, nhưng một số trang web “được ưu tiên quá mức”, thay vì lấy thông tin này từ địa chỉ IP — điều này tình cờ lại kém chính xác hơn nhiều và phù hợp hơn với hóa đơn trong trường hợp này trường hợp sử dụng - nhấn mạnh vào việc biết vị trí chính xác cho đến cấp độ đường phố thông qua API định vị địa lý - đây là điều liên quan.
Nói cách khác, các nhà phát triển web nói chung nên cố gắng sử dụng vị trí thô và chỉ sử dụng vị trí chính xác khi có nhu cầu chính đáng để làm như vậy. Theo dõi vị trí thô là một tập hợp con của theo dõi vị trí trong đó vị trí gần đúng của nội dung ( trong bán kính 30 km ) đáp ứng các yêu cầu của trường hợp sử dụng. Ngược lại, theo dõi vị trí chính xác hầu như luôn chính xác. Tốt nhất, nó có thể xác định bạn đang ở đâu đến từng mét.
Ngoài ra, các nhà phát triển Trang web chỉ nên yêu cầu thông tin vị trí địa lý khi cần thiết cho nhiệm vụ hiện tại và sau đó sử dụng thông tin vị trí cho nhiệm vụ mà nó được cung cấp cho họ. Và cuối cùng, thông tin vị trí sẽ được nhà phát triển xử lý sau khi hoàn thành nhiệm vụ đó. Hơn nữa, nếu thông tin đó cần được lưu trữ, thông tin này phải được tiết lộ rõ ràng và dễ thấy cho người dùng cuối. Sau đó, nhà phát triển nên lưu trữ thông tin này một cách có trách nhiệm bằng cách mã hóa dữ liệu đó. Sau khi hết thời gian lưu giữ đã nêu, thông tin vị trí phải được xóa khỏi kho lưu trữ dữ liệu của nhà phát triển.
Ngay cả khi nhà phát triển áp dụng các phương pháp hay nhất do W3C ban hành, thì việc dự đoán hoặc ngăn chặn một số tình huống vốn đã có vấn đề do cách tạo API. [ 2 ]
- Quyền của người dùng chỉ được yêu cầu một lần và không có cách nào để thu hồi quyền của người dùng cũng như xóa dữ liệu vị trí của người dùng nếu người dùng thay đổi ý định.
- Rất dễ nhấp vào 'cho phép' và vô tình cho phép truy cập. Và khi người dùng nhấp vào 'cho phép', vị trí chính xác của thông tin kinh độ và vĩ độ của họ sẽ được gửi qua. Xem xét tính chất nhạy cảm của thông tin này, chẳng phải sẽ tốt hơn nếu API có câu “Bạn có chắc không?” hộp thoại xác nhận lại? Tại thời điểm viết, không có kiểm soát như vậy tại chỗ.
- API vị trí địa lý sử dụng mô hình quyền trên mỗi miền thay vì mô hình quyền trên mỗi trang. Vì vậy, ví dụ: người dùng không thể chỉ cho phép một trang web, chẳng hạn như site.com/map.html , truy cập Vị trí địa lý trong khi không cho phép một trang web khác trong cùng một miền site.com/mail.html truy cập Vị trí địa lý.
- Trang web và người dùng không thể giảm độ chính xác của vị trí địa lý khi yêu cầu hoặc cung cấp nó.
- Bật VPN sẽ không che giấu Vị trí địa lý bắt nguồn từ API Web. Chỉ IP sẽ thay đổi với VPN.
- Vô hiệu hóa vị trí địa lý hoàn toàn trong trình duyệt. Vô hiệu hóa Định vị địa lý là tùy chọn hạn chế nhất, vì nó sẽ kích hoạt lệnh cấm hoàn toàn đối với các yêu cầu Định vị địa lý. Tuy nhiên, nếu điều này quá hạn chế đối với trường hợp sử dụng của bạn, bạn có thể chọn tùy chọn 2.
3. Đưa ra quyết định có cân nhắc và có ý thức về việc chỉ cho phép truy cập vào một trang web nếu trang web đó được đảm bảo và có trường hợp sử dụng hợp lệ. Rất dễ vô tình chọn sai phương án. Sau khi được cấp quyền, trình duyệt có thể gửi thông tin địa lý đến máy chủ.
Mã sau đây của tác giả có thể được sử dụng để thử nghiệm với HTML5 GEO API và rất được khuyến khích. Vui lòng tìm mã trên GitHub của tác giả. [ 3 ]
Client-Side jQuery lấy thông tin Vị trí địa lý từ trình duyệt.
<!DOCTYPE html>
<html>
<head><title> -=Geo Information-=</title></head>
<link rel="stylesheet" href="style.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<body onload="getLocation()">
<h1> -=Geo Information-= </h1>
<p id="error"></p>
<p id="ip"></p>
<p id="lat"></p>
<p id="lon"></p>
<script>
var ret_ip;
var x = document.getElementById("error");
var q = document.getElementById("ip");
var y = document.getElementById("lat");
var z = document.getElementById("lon");
$(function() {
$.getJSON("https://api.ipify.org?format=jsonp&callback=?",
function(json) {
q.innerHTML = "Your IP: " + json.ip;
ret_ip=json.ip;
}
);
});
var x = document.getElementById("error");
function getLocation() {
if (navigator.geolocation) {
navigator.geolocation.getCurrentPosition(showPosition);
} else {
x.innerHTML = "Geolocation Not Available";
}
}
function showPosition(position)
{
var a=position.coords.latitude;
var b=position.coords.longitude;
$(document).ready(function()
{
y.innerHTML = "Your Latitude : " + position.coords.latitude;
z.innerHTML = "Your Longitude: " + position.coords.longitude;
$.post("/", {ip: ret_ip, lat: a, lon: b },);
});
}
</script>
<!--<a href="/booking.html">Query</a> -->
</body>
</html>
Hy vọng rằng kịch bản này làm nổi bật cách một nhà phát triển web không tuân thủ có thể thu thập thông tin này và về mặt lý thuyết sẽ truyền thông tin này cho bất kỳ ai.
Node.JS phía máy chủ nhận yêu cầu POST và cập nhật cơ sở dữ liệu.
const express = require("express");
const app = express();
const router = express.Router();
var bodyParser = require('body-parser');
const sqlite3 = require('sqlite3').verbose();
let db = new sqlite3.Database('./db/geo.db');
var ip;
var lat;
var lon;
app.use(express.static("public"));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
router.get('/index.html', (req, res) =>
{
})
app.post('/', function(req, res)
{
let gip = "";
let glat = "";
let glon = "";
gip = JSON.stringify(req.body.ip);
glat = JSON.stringify(req.body.lat);
glon = JSON.stringify(req.body.lon);
let myObj = {
geoip: gip,
geolat: glat,
geolon: glon,
};
var insertQuery = 'INSERT INTO GEO (IP,LAT,LON) VALUES (:geoip,:geolat,:geolon)';
db.run(insertQuery , [myObj.geoip,myObj.geolat,myObj.geolon], (err) => {
if(err) return;
});
});
//Listening
const listener = app.listen(process.env.PORT, function() {
console.log("Your app is listening on port " + listener.address().port);
});
Using the Great Pyramid of Giza GPS Coordinates
Overriding Geolocation information — with The Great Pyramid of Giza GPS Coordinates
Nhiều người ngạc nhiên rằng bản đồ của Google và các trang web tương tự có thể dự đoán chính xác vị trí của họ ngay cả khi VPN đang hoạt động. Hãy tưởng tượng bật vị trí VPN đến một nơi nào đó kỳ lạ và sau đó mở bản đồ google để thấy rằng vị trí đó không thay đổi. Thay vào đó, nó cho thấy bạn đang ở đâu với độ chính xác tuyệt đối!
Thủ phạm ở đây là API vị trí địa lý mà theo thiết kế sẽ cung cấp vị trí của một người dựa trên GPS và các cảm biến khác theo ý của nó. Vị trí địa lý có được thông qua JavaScript, như trong trường hợp API vị trí địa lý, thường có độ chính xác cao, điều này có thể vi phạm quyền riêng tư của bạn.
Với thông tin này, tác giả hy vọng rằng câu hỏi Định vị địa lý có thể được hiểu và giảm thiểu trong từng trường hợp cụ thể tùy thuộc vào trường hợp sử dụng hiện tại. Như đã đề cập trước đó, người ta có thể chặn tất cả các cuộc gọi định vị địa lý bằng cách sử dụng các cài đặt thích hợp trong trình duyệt hoặc bằng cách mã hóa cứng một tập hợp tọa độ GPS theo quyết định của người dùng cuối. Ngoài ra còn có các tiện ích mở rộng trình duyệt có thể thực hiện việc này cho người dùng cuối. Location Guard là một trong những tiện ích mở rộng có sẵn cho Firefox và Chrome.
Bảo vệ vị trí bảo vệ chống Định vị địa lý dựa trên JavaScript (có độ chính xác rất cao), KHÔNG phải Định vị địa lý dựa trên IP (thường có độ chính xác thấp). Đối với trường hợp thứ hai, hãy sử dụng VPN.[ 4 ]
Người giới thiệu
- https://www.w3.org/TR/geolocation/#privacy
- https://www.researchgate.net/publication/299466959_Exploring_and_mitigating_privacy_threats_of_HTML5_geolocation_API
- https://github.com/rajanikanth-sugumar/
- https://chrome.google.com/webstore/detail/location-guard/cfohepagpmnodfdmjliccbbigdkfcgia?hl=en
- API định vị địa lý — API web | MDN (mozilla.org)
- https://dev.w3.org/geo/api/test-suite/
- https://www.wigle.net/
- https://en.wikipedia.org/wiki/Wi-Fi_positioning_system

![Dù sao thì một danh sách được liên kết là gì? [Phần 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































