首页 文章 精选 留言 我的

精选列表

搜索[双因素认证],共10003篇文章
优秀的个人博客,低调大师

Android 内存安全漏洞大幅减少,Rust 成为关键因素

从 Android 12 开始,Google 就在 Android 系统中带来了 Rust 语言的支持,作为 C/C++ 的替代方案,他们的目标并不是把现有的 C/C++ 代码都转换成为 Rust,而是在新编写的代码中使用 Rust 语言开发。 通过将越来越多的 Rust 代码集成到其 Android 操作系统中,Google 在减少漏洞方面的努力最终是获得了回报。 Google 在公告中表示,"在过去几年/几个 Android 系统版本中,内存安全漏洞的数量大幅下降"。 具体而言,2019 年至 2022 年期间,每年的内存安全漏洞数量从最初的 223 个下降到如今的 85 个。内存安全漏洞现在在 Android 系统总漏洞的占比也只有 35%,四年前的占比则是 76%,而且 2022 年也是内存安全漏洞首次不再是 Android 系统漏洞最大占比的一年。 在此期间,进入 Android 系统的新内存不安全代码的数量也已经减少。 Rust 占了 Android 13 所有新的原生代码的 21%,在 AOSP 中已经有大约 150 万行 Rust 代码,涵盖各种功能和元件,其中就包括超宽带(UWB)栈、DNS-over-HTTP3、Keystore2、Android 的虚拟化框架(AVF),以及各种其他组件及其开源依赖。 到目前为止,在整个 Android 12 和 13 系统中,Rust 代码中发现的内存安全漏洞为零,这是一个重要的发现,因为过去 Android 漏洞密度大于 1/kLOC,也就是说,每一千行代码至少会发现一个漏洞,基于 Rust 代码的行数来看,此举可能已经阻挡了成百上千个漏洞进入 Android 系统。

优秀的个人博客,低调大师

RPA成功实施落地的7个关键因素详解(上)

RPA(机器人流程自动化)是基于计算机编码以及基于规则的软件,通过执行重复的基于规则的任务来将手工活动进行自动化的一种技术,这个技术通过录制模拟人电脑端鼠标点击、键盘敲打的行为。2019年RPA市场迎来大爆发,当你看到这篇文章,或许您已决定您的企业将受益于机器人流程自动化(RPA)。您或许会明智地选择阿里云RPA作为您的供应商。您甚至已经确定了一系列可以自动化的流程,因为这将使您的业务节省超过工时的三倍。一旦启动并运行了这些流程,您的团队将有时间和带宽来处理您一直推迟的项目,因为此前没有人有时间专注于它。那你的下一步是什么?在推出RPA的过程中,让您的业务中的所有部门参与进来的最佳方法是什么?您如何确保从即将投资的数字化劳动力中获得最大的利用?为了很好地回答这些问题,阿里云RPA有着8年的开发实施经验。这些问题帮助我们总结了一系列

优秀的个人博客,低调大师

企业上云计划:上云前应该考虑哪些因素

云计算,作为企业向互联网+转型的核心基础服务,正以前所未有的速度扩张。事实上,目前中国绝大部分企业组织或多或少都采用了一些云计算的能力。那么,如果您是一家业务稳定的公司,并被云计算“弹性、灵活、安全、低成本”的这些好处诱惑着,就可参照本文介绍的四步,清晰上云路。 第一步:先问自己5个问题,不要人云亦云所以,在决策前,先通过5个简单的问题,看企业是否真的需要上云:1)你的用户是否分布在全国各地,地域跨度较大?2)你是否在基础IT环节投入了较大的成本但运行效果并不满意?3)你的业务是否在快速发展,或者即将进入爆发期?4)你是否遇到或可能遇到安全问题,以至影响企业公共业务的运行?5)你的竞争对手是否已上云并取得较好效果?如果5个问题中,至少有一个是肯定的回答,就可以着手下一步开始选购云计算服务,否则,则需要弄清楚,是否值得付出上云的成本与风险。 第二步: 确定云架构方案,这是地基不能马虎1)选择混合云公有云如果企业拥有大量的自购IT基础设施,有自建或租赁的机房,或有一些敏感数据仍需保留在自己的物理服务器上,则可以通过使用虚拟专用网VPC来构建混合云,作为阶段性的过度方案。如果企业尚未搭建IT基础设施,那么公有云是最佳的选择。2)设计系统架构A、一般企业会根据在传统IDC搭建这套IT系统的方式,先做一个方案,可以作为上云方案的基础和比较方案。主要考虑资源的规模、性能要求、扩展性要求等。B、一些较大的云计算平台,例如阿里云,提供多媒体、医疗、游戏、物联网、游戏等多个行业细分解决方案,里面提供了丰富的典型部署案例可供参考,企业可以照葫芦画瓢,看看同行是如何做的,并能通过服务价格计算器,来预估整体预算。C、最简单的,如果自己没有把握,可以通售前技术服务进行咨询,大部分云计算平台均提供此类服务。 第三步: 前期测试,好不好,用了才知道根据业务的部署方案,选取相应的云产品及服务进行功能、性能、安全性测试。在国内最大的云计算服务商阿里云上,所有产品均采取自助式服务,注册阿里云账号、开通相应的测试服务实例即可。 第四步: 部署迁移通过测试结果,就可以购买需要的产品与配置,开始迁移上云。其中几个注意事项不可忽视。首先,能省就省,各大云厂商会不定期推出一些优惠政策,特别是针对新购客户。例如阿里云就推出了企业级高性能云服务器ECS首台2-5折的活动,可以大大节约我们的上云成本。 其次,如果是新业务在云端构建,则需要先完成域名备案。最后,遇到重要活动或事件,很可能需要进行服务保障,则可以提前通知云服务提供方做好准备。以阿里云为例,就提供专业的护航服务,以确保帮助企业用户度过类似游戏公测上线,双十一促销这样的流量洪峰。

优秀的个人博客,低调大师

私有云和混合云成功的四个关键因素

【大咖・来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》 许多企业希望获得云计算基础设施的敏捷性和成本效益,但是在部署实施云计算时,在复杂性和成本方面受到阻碍。此外,企业需要将云部署扩展到任何级别的能力,以及管理许多类型的计算和存储资源的灵活性。在本文中,将看到成功部署和管理私有云或混合云的这些要求。 (1)使云计算变简单 企业想要采用本地部署的云计算,但是他们不想花几个星期或几个月来开发它们,也不想雇佣一个OpenStack或VMware专家团队。实质上,企业需要与AWS或其他公共云获得相同的点对点配置,但只能使用本地部署的云计算提供的治理,可扩展性能和控制。 有三个方面要考虑: 通用易用性 - 云平台应包含一个直观的用户界面,使最终用户能够开展自助服务,从而减少IT部门的支持负担。然而,自助服务需要管理:系统应该包括工作流管理和基于角色的访问控制(RBAC),因此IT团队可以设置参数,以确保自助服务完全受控,可审计的方式进行。例如,云平台可能需要许可才能在用户创建或在删除虚拟服务器之前或向虚拟服务器添加资源。 部署 - 云计算软件应该利用包含其自己的虚拟机管理程序的引导系统,并可以安装在服务器上,并在30分钟内启动并运行。预先安装在超级融合平台上的云计算更易于部署。 IT管理应该能够通过网络发现虚拟机管理程序或计算节点,然后云端自动出现,因此安装操作系统或虚拟机管理程序没有任何人工参与。 配置和管理 - 最简单的云计算包括自我发现,自动配置和统一管理。用户界面在云平台之间有很大差异,但最简单的就是允许对所有基础设施组件进行单一视图(甚至跨地理位置),并允许点对点配置。由于运行云计算基本上意味着控制对资源池的访问,云计算的管理系统应该使用基于角色的访问控制(RBAC)来允许管理员控制对服务器,虚拟机,存储资产,网络带宽甚至CPU内核的访问。管理体系越细致,企业就越能够优化资源和控制成本。 例如,一个全面的管理系统应该能够让云计算管理人员要求对一系列用户操作进行审批。每当用户发出影响资源利用率、成本或虚拟服务器或应用程序可用性的请求(如虚拟机创建或销毁,或请求向虚拟机添加CPU、RAM或存储资源)时,管理人员就需要对这些请求进行审批。 (2)可扩展性 企业应该能够利用他们掌握的任何资源来扩展云计算。 IT管​​理人员不应限制购买一定数量的供应商节点进行扩展,而应该能够使用单个服务器或单个磁盘(无论是SATA,SAS,SSD还是NVME接口的)进行扩展。这种灵活性允许组织通过使用现成的资源优化资源,从而***程度降低成本。 此外,许多公司都有不同地理分布的业务,希望能够使用不同数据中心的资源来扩展云计算,或者希望能够使用多个云。例如,纽约数据中心的管理员可能需要50个附加服务器来扩展,而芝加哥的管理员可能会让这些服务器处于空闲状态。云平台应允许公司在不同地理位置的节点或不同地理位置的类似云平台中进行扩展,所有这些云都通过单个用户界面进行管理。 许多云平台严格限制了可以并入到云中的节点数量。某些平台例如限于32或64个节点。理想的云平台应该允许扩展到数百个节点。 ***,云平台应该结合软件定义的存储,这样可以实现不同类型磁盘的非对称扩展,从而实现***的扩展灵活性。 (3)灵活性 该平台应该能够在任何服务器,任何存储和任何网络接口上运行。大多数公司都想使用商品化硬件,云计算应该允许这样做。一些公司希望在超融合平台上实现云教育处,而且这也应该是可能的。 (4)更低的总拥有成本 硬件和云计算软件许可证只是云计算总体拥有成本(TCO)的起点,但它们是考虑节省的重要场所。一些云计算软件能够以其他产品的成本的一小部分获得许可,甚至超级融合平台的价格也各不相同。 灵活地使用现有的商品硬件帮助企业优化自己的资源,避免新的资本支出降低成本。例如,如果他们使用软件定义的存储,他们不必购买新的SAN或新硬件来实现云计算。 要考虑的最终TCO领域是专业服务和定制开发。此外,云计算平台提供商之间的定价差异很大。 实现本地部署的云计算有许多途径,目前具有许多不同价格点和功能集的产品。通过关注这些讨论,企业可以找到最适合其需求的云计算。

优秀的个人博客,低调大师

详解Django的CSRF认证

1.csrf原理 csrf要求发送post,put或delete请求的时候,是先以get方式发送请求,服务端响应时会分配一个随机字符串给客户端,客户端第二次发送post,put或delete请求时携带上次分配的随机字符串到服务端进行校验 2.Django中的CSRF中间件 首先,我们知道Django中间件作用于整个项目。 在一个项目中,如果想对全局所有视图函数或视图类起作用时,就可以在中间件中实现,比如想实现用户登录判断,基于用户的权限管理(RBAC)等都可以在Django中间件中来进行操作 Django内置了很多中间件,其中之一就是CSRF中间件 MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] 上面第四个就是Django内置的CSRF中间件 3.Django中间件的执行流程 Django中间件中最多可以定义5个方法 process_request process_response process_view process_exception process_template_response Django中间件的执行顺序 1.请求进入到Django后,会按中间件的注册顺序执行每个中间件中的process_request方法 如果所有的中间件的process_request方法都没有定义return语句,则进入路由映射,进行url匹配 否则直接执行return语句,返回响应给客户端 2.依次按顺序执行中间件中的process_view方法 如果某个中间件的process_view方法没有return语句,则根据第1步中匹配到的URL执行对应的视图函数或视图类 如果某个中间件的process_view方法中定义了return语句,则后面的视图函数或视图类不会执行,程序会直接返回 3.视图函数或视图类执行完成之后,会按照中间件的注册顺序逆序执行中间件中的process_response方法 如果中间件中定义了return语句,程序会正常执行,把视图函数或视图类的执行结果返回给客户端 否则程序会抛出异常 4.程序在视图函数或视图类的正常执行过程中 如果出现异常,则会执行按顺序执行中间件中的process_exception方法 否则process_exception方法不会执行 如果某个中间件的process_exception方法中定义了return语句,则后面的中间件中的process_exception方法不会继续执行了 5.如果视图函数或视图类中使用render方法来向客户端返回数据,则会触发中间件中的process_template_response方法 4.Django CSRF中间件的源码解析 Django CSRF中间件的源码 class CsrfViewMiddleware(MiddlewareMixin): def _accept(self, request): request.csrf_processing_done = True return None def _reject(self, request, reason): logger.warning( 'Forbidden (%s): %s', reason, request.path, extra={ 'status_code': 403, 'request': request, } ) return _get_failure_view()(request, reason=reason) def _get_token(self, request): if settings.CSRF_USE_SESSIONS: try: return request.session.get(CSRF_SESSION_KEY) except AttributeError: raise ImproperlyConfigured( 'CSRF_USE_SESSIONS is enabled, but request.session is not ' 'set. SessionMiddleware must appear before CsrfViewMiddleware ' 'in MIDDLEWARE%s.' % ('_CLASSES' if settings.MIDDLEWARE is None else '') ) else: try: cookie_token = request.COOKIES[settings.CSRF_COOKIE_NAME] except KeyError: return None csrf_token = _sanitize_token(cookie_token) if csrf_token != cookie_token: # Cookie token needed to be replaced; # the cookie needs to be reset. request.csrf_cookie_needs_reset = True return csrf_token def _set_token(self, request, response): if settings.CSRF_USE_SESSIONS: request.session[CSRF_SESSION_KEY] = request.META['CSRF_COOKIE'] else: response.set_cookie( settings.CSRF_COOKIE_NAME, request.META['CSRF_COOKIE'], max_age=settings.CSRF_COOKIE_AGE, domain=settings.CSRF_COOKIE_DOMAIN, path=settings.CSRF_COOKIE_PATH, secure=settings.CSRF_COOKIE_SECURE, httponly=settings.CSRF_COOKIE_HTTPONLY, ) patch_vary_headers(response, ('Cookie',)) def process_request(self, request): csrf_token = self._get_token(request) if csrf_token is not None: # Use same token next time. request.META['CSRF_COOKIE'] = csrf_token def process_view(self, request, callback, callback_args, callback_kwargs): if getattr(request, 'csrf_processing_done', False): return None if getattr(callback, 'csrf_exempt', False): return None if request.method not in ('GET', 'HEAD', 'OPTIONS', 'TRACE'): if getattr(request, '_dont_enforce_csrf_checks', False): return self._accept(request) if request.is_secure(): referer = force_text( request.META.get('HTTP_REFERER'), strings_only=True, errors='replace' ) if referer is None: return self._reject(request, REASON_NO_REFERER) referer = urlparse(referer) if '' in (referer.scheme, referer.netloc): return self._reject(request, REASON_MALFORMED_REFERER) if referer.scheme != 'https': return self._reject(request, REASON_INSECURE_REFERER) good_referer = ( settings.SESSION_COOKIE_DOMAIN if settings.CSRF_USE_SESSIONS else settings.CSRF_COOKIE_DOMAIN ) if good_referer is not None: server_port = request.get_port() if server_port not in ('443', '80'): good_referer = '%s:%s' % (good_referer, server_port) else: good_referer = request.get_host() good_hosts = list(settings.CSRF_TRUSTED_ORIGINS) good_hosts.append(good_referer) if not any(is_same_domain(referer.netloc, host) for host in good_hosts): reason = REASON_BAD_REFERER % referer.geturl() return self._reject(request, reason) csrf_token = request.META.get('CSRF_COOKIE') if csrf_token is None: return self._reject(request, REASON_NO_CSRF_COOKIE) request_csrf_token = "" if request.method == "POST": try: request_csrf_token = request.POST.get('csrfmiddlewaretoken', '') except IOError: pass if request_csrf_token == "": request_csrf_token = request.META.get(settings.CSRF_HEADER_NAME, '') request_csrf_token = _sanitize_token(request_csrf_token) if not _compare_salted_tokens(request_csrf_token, csrf_token): return self._reject(request, REASON_BAD_TOKEN) return self._accept(request) def process_response(self, request, response): if not getattr(request, 'csrf_cookie_needs_reset', False): if getattr(response, 'csrf_cookie_set', False): return response if not request.META.get("CSRF_COOKIE_USED", False): return response self._set_token(request, response) response.csrf_cookie_set = True return response 从上面的源码中可以看到,CsrfViewMiddleware中间件中定义了process_request,process_view和process_response三个方法 先来看process_request方法 def _get_token(self, request): if settings.CSRF_USE_SESSIONS: try: return request.session.get(CSRF_SESSION_KEY) except AttributeError: raise ImproperlyConfigured( 'CSRF_USE_SESSIONS is enabled, but request.session is not ' 'set. SessionMiddleware must appear before CsrfViewMiddleware ' 'in MIDDLEWARE%s.' % ('_CLASSES' if settings.MIDDLEWARE is None else '') ) else: try: cookie_token = request.COOKIES[settings.CSRF_COOKIE_NAME] except KeyError: return None csrf_token = _sanitize_token(cookie_token) if csrf_token != cookie_token: # Cookie token needed to be replaced; # the cookie needs to be reset. request.csrf_cookie_needs_reset = True return csrf_token def process_request(self, request): csrf_token = self._get_token(request) if csrf_token is not None: # Use same token next time. request.META['CSRF_COOKIE'] = csrf_token 从Django项目配置文件夹中读取CSRF_USE_SESSIONS的值,如果获取成功,则从session中读取CSRF_SESSION_KEY的值,默认为'_csrftoken',如果没有获取到CSRF_USE_SESSIONS的值,则从发送过来的请求中获取CSRF_COOKIE_NAME的值,如果没有定义则返回None。 再来看process_view方法 在process_view方法中,先检查视图函数是否被csrf_exempt装饰器装饰,如果视图函数没有被csrf_exempt装饰器装饰,则程序继续执行,否则返回None。接着从request请求头中或者cookie中获取携带的token并进行验证,验证通过才会继续执行与URL匹配的视图函数,否则就返回403 Forbidden错误。 实际项目中,会在发送POST,PUT,DELETE,PATCH请求时,在提交的form表单中添加 {% csrf_token %} 即可,否则会出现403的错误 5.csrf_exempt装饰器和csrf_protect装饰器 5.1 基于Django FBV 在一个项目中,如果注册起用了CsrfViewMiddleware中间件,则项目中所有的视图函数和视图类在执行过程中都要进行CSRF验证。 此时想使某个视图函数或视图类不进行CSRF验证,则可以使用csrf_exempt装饰器装饰不想进行CSRF验证的视图函数 from django.views.decorators.csrf import csrf_exempt @csrf_exempt def index(request): pass 也可以把csrf_exempt装饰器直接加在URL路由映射中,使某个视图函数不经过CSRF验证 from django.views.decorators.csrf import csrf_exempt from users import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/',csrf_exempt(views.index)), ] 同样的,如果在一个Django项目中,没有注册起用CsrfViewMiddleware中间件,但是想让某个视图函数进行CSRF验证,则可以使用csrf_protect装饰器 csrf_protect装饰器的用法跟csrf_exempt装饰器用法相同,都可以加上视图函数上方装饰视图函数或者在URL路由映射中直接装饰视图函数 from django.views.decorators.csrf import csrf_exempt @csrf_protect def index(request): pass 或者 from django.views.decorators.csrf import csrf_protect from users import views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^index/',csrf_protect(views.index)), ] 5.1 基于Django CBV 上面的情况是基于Django FBV的,如果是基于Django CBV,则不可以直接加在视图类的视图函数中了 此时有三种方式来对Django CBV进行CSRF验证或者不进行CSRF验证 方法一,在视图类中定义dispatch方法,为dispatch方法加csrf_exempt装饰器 from django.views.decorators.csrf import csrf_exempt from django.utils.decorators import method_decorator class UserAuthView(View): @method_decorator(csrf_exempt) def dispatch(self, request, *args, **kwargs): return super(UserAuthView,self).dispatch(request,*args,**kwargs) def get(self,request,*args,**kwargs): pass def post(self,request,*args,**kwargs): pass def put(self,request,*args,**kwargs): pass def delete(self,request,*args,**kwargs): pass 方法二:为视图类上方添加装饰器 @method_decorator(csrf_exempt,name='dispatch') class UserAuthView(View): def get(self,request,*args,**kwargs): pass def post(self,request,*args,**kwargs): pass def put(self,request,*args,**kwargs): pass def delete(self,request,*args,**kwargs): pass 方式三:在url.py中为类添加装饰器 from django.views.decorators.csrf import csrf_exempt urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'^auth/', csrf_exempt(views.UserAuthView.as_view())), ] csrf_protect装饰器的用法跟上面一样

优秀的个人博客,低调大师

Linux ssh免密钥认证

hadoop和ansible都需要这个东西,其实很简单。 第一,在需要免秘钥登录的机器上生成公钥和私钥: 1 ssh -keygen 第二,拷贝生成的公钥id_rsa.pub到远程机器上: 1 ssh -copy- id -i /root/ . ssh /id_rsa .pubroot@192.168.0.247 #用此方式拷贝的好处是不用改名 这时再登录192.168.0.247的机器就无需密码了。 1 2 3 [root@zabbix_server~] #ssh192.168.0.247 Lastlogin:MonNov2813:48:332016from192.168.0.3 [root@localhost~] # 如果是普通账号免登录则需先切换普通账号,然后再生成公钥和私钥。 本文转自 王家东哥 51CTO博客,原文链接:http://blog.51cto.com/xiaodongge/1877339

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册