百度地图定位及图片上传安全
百度地图定位
1,修复之前我们用的是myGeo.getPoint,这个方法回返回经纬度,但是由于我们生活在这个国度,你懂得,国家测量局要求“为了对个人隐私保护”不可以通过接口准确返回经纬度,要求二次加密。
2,百度内部其实开放了,解密算法BMap.Convertor.translate
3,通过解密发现,解密后的经纬度还是差太多,定位跑偏
4,尝试另一种方法:智能搜索,即localsearch类,可以根据任意关键词查询到对应的POI信息。 智能搜索有三种方法,分别是:search、searchInBounds和searchNearby。利用此三种方法可以搜索到百度地图数据库中所有POI信息。
重点介绍 search方法:
<script type="text/javascript">
var myGeo = new BMap.Geocoder(); var map = new BMap.Map("mapDIV"); var marker; var options = {renderOptions: { map: map, panel: "results",//结果容器id //autoViewport: true, //自动结果标注 selectFirstResult: false //指定到第一个目标 //enableRouteSearchBox: true, //enableRouteInfo:false }, pageCapacity: 1 }; var myLocalsearch = new BMap.LocalSearch(map,options); map.enableScrollWheelZoom(); $('#area_id').change(function(){ var province = $('#city_id').find("option:selected").text(); var select = $('#area_id').find("option:selected").text(); shangquan(); var adress = $('#address').val(); if(select==){ var select = '黄浦区'; } var select = province+select+adress; getMapPoint(select); }); function getMapPoint(select){ //这里用search方法的原因是以前的getPoint方法对地址解析定位不准确 myLocalsearch.search(select); //搜索成功后的回调函数,对我们这次修复非常重要 myLocalsearch.setSearchCompleteCallback(function(results){ if(myLocalsearch.getStatus() == BMAP_STATUS_SUCCESS){ var poi = results.getPoi(0); if(poi){ var pt2 = poi.point; setPoint(pt2.lng,pt2.lat);//取得准确的经纬度 } }else{ myGeo.getPoint(select, function(point){ if (point) { //BMap.Convertor.translate(point,0,translateCallback); lng=point.lng; lat=point.lat; setPoint(lng,lat); }else{ getMapPoint('人民大道200号'); }
}, "上海市"); } }); } function setPoint(lng,lat){ var point = new BMap.Point(lng, lat); var opts = {type: BMAP_NAVIGATION_CONTROL_LARGE} var marker; map.addControl(new BMap.NavigationControl(opts)); map.centerAndZoom(point, 16); myGeo.getLocation(new BMap.Point(lng, lat), function(result){ if (result){ address = result.address; } var infoWindow = new BMap.InfoWindow(" "+address+"<input type=\"button\" value='确认这个位置' onclick='confirmPosition(\""+address+"\","+lng+", "+lat+")'/> ", opts); marker.openInfoWindow(infoWindow); }); if(marker){ marker.setPosition(point); }else{ marker = new BMap.Marker(point); //将标注置于其他标注之上。 //默认情况下,纬度较低的标注会覆盖在纬度较高的标注之上,从而形成一种立体效果。通过此方法可使某个标注覆盖在其他所有标注之上。 //注意:如果在多个标注对象上调用此方法,则这些标注依旧按照纬度产生默认的覆盖效果。 marker.setTop(true); map.addOverlay(marker); marker.enableDragging(true); } marker.setTitle("拖动此图标进行选择"); //var myGeo = new BMap.Geocoder(); marker.addEventListener("dragend", function(e){ var lng = e.point.lng; var lat = e.point.lat; var address = ; myGeo.getLocation(new BMap.Point(lng, lat), function(result){ if (result){ address = result.address;} var infoWindow = new BMap.InfoWindow(" "+address+"<input type=\"button\" value='确认这个位置' onclick='confirmPosition(\""+address+"\","+lng+", "+lat+")'/> ", opts);marker.openInfoWindow(infoWindow); }); });
marker.addEventListener('dragstart', function(e){ this.closeInfoWindow(); });
} function confirmPosition(address,lng, lat){ $(function(){ $("#lng").val(lng); $("#lat").val(lat); if(lng&&lat){ if($("#address").val()==||$("#address").val()=='详细地址,如西藏中路268号来福士广场3楼301室'){ $("#address").val(address); } alert("标记成功!"); return ; } }); } </script>
记事狗相册图片上传安全
问题:记事狗相册插件图片上传安全漏洞,可以用抓包方式上传任何文件
原因: 1,没有验证上传的文件类型mime 2,没有验证上传的文件内容是不是图片 3,有有验证文件最后扩展名(后缀)
解决办法: 1,用如下方法得到文件mime类型:
$finfo = finfo_open(FILEINFO_MIME);
$mime = @finfo_file($finfo, $_FILES[$fieldname]['tmp_name']);
finfo_close($finfo);$regexp = '/^([a-z\-]+\/[a-z0-9\-\.\+]+)(;\s.+)?$/';
preg_match($regexp, $mime, $matches);
$matches[1]就是miem类型:image/jpeg…
2,用如下方法查看文件内容类型:
$file_data = getimagesize($_FILES[$fieldname]['tmp_name']);
$file_data['mime']就是文件内容类型
3,用如下方法查看文件后缀:
$file = $_FILES['Filedata']; $ext = pathinfo($file['name'], PATHINFO_EXTENSION);