月度归档: 2017 年 11 月

  • MacOS 爆严重安全漏洞 不用密码就能随意登录(附临时应对方案)

    MacOS 爆严重安全漏洞 不用密码就能随意登录(附临时应对方案)

    北京时间今日(2017/11/29)凌晨,Twitter 上一名安全公司人员?Lemi Orhan Ergin?发推公布了一个 macOS High Sierra 系统的重要安全漏洞,Lemi 表示受这一漏洞影响,任何人都可以使用「空白密码」随意以 Mac 的「root」身份登录。获取「root」身份将会获取 Mac 的最高权限,可以任意查看、甚至修改电脑上的所有文件和数据。

    因为这个漏洞,哪怕 Mac 处于锁定状态下,也可以使用「root」身份登录。所以如果你的 Mac 开启了远程访问并且暴露了自己的 IP 地址,那么整个计算机都会暴露在巨大的风险之中。

    Lemi 发的推文
    Lemi 发的推文

    你可以在任意一个 Mac 用户、管理员甚至访客模式下通过以下步骤来复现这个漏洞以测试自己的电脑是否具有该漏洞的潜在威胁:

    1. 打开「系统偏好设置 – 用户与群组」;
    2. 点击左下角的「黄色小锁」来做出变更;
    3. 在「用户名」处键入「root」;
    4. 把鼠标移动到「密码」框内点击一次,但并不需要键入内容,保持空白即可;
    5. 点击「解锁」,现在你应该已经获得权限可以随意添加管理员账户了。

    在锁屏界面下,你也可以使用这样的花招来绕过安全登录,你只需要在登录时选择「其它」用户,然后填写「root」和「空白密码」即可。

    上述漏洞目前在最新版的 macOS High Sierra 10.13.1 和 macOS 10.13.2 beta 版本中测试出现。目前尚不知道如此重大的安全漏洞是如何通过苹果的安全检测的,但可以肯定的是,苹果一定会在第一时间就此漏洞问题发言并立即着手修复漏洞。

    临时解决办法

    在苹果官方给出漏洞补丁之前,我们可以自己启用 Root 用户来暂时封堵这个漏洞,方法如下:

    1. 打开「系统偏好设置 – 用户与群组」;
    2. 点击左下角的「黄色小锁」来做出变更;
    3. 键入你自己的管理员「用户名」和「密码」;
    4. 点击「登录选项」;
    5. 在窗口的底部「网络账户服务器」处点击「加入」;
    6. 选择「打开目录实用工具」;
    7. 点击左下角的「黄色小锁」来做出变更,并键入你自己的管理员「用户名」和「密码」;
    8. 在顶部的菜单栏中选中「编辑」;
    9. 选择「启用 Root 用户」;
    10. 为 root 用户设置全新的密码。
    设置 Root 用户密码
    设置 Root 用户密码

    关闭 Root 用户的方法和上述步骤一致,只不过第 9 步的地方选择「停用 Root 用户」即可。

    为了进一步保护你的 Mac,你也可以同时关闭自己的「客人用户」(虽然在你启用了 root 密码之后就没有太大必要关闭「客人用户」)。关闭「客人用户」的方法也很简单。你只需要去「系统偏好设置 – 用户和群组」里选择「客人用户」,然后不勾选「允许客人登录到这台电脑」即可。

    最新消息,苹果公司发言人已经就此漏洞作出声明:

    We are working on a software update to address this issue. In the meantime, setting a root password prevents unauthorized access to your Mac. To enable the Root User and set a password, please follow the instructions here: https://support.apple.com/en-us/HT204012. If a Root User is already enabled, to ensure a blank password is not set, please follow the instructions from the ‘Change the root password’ section.

  • 宝塔BT面板 微擎开启redis 微擎性能优化

    宝塔BT面板 微擎开启redis 微擎性能优化

    [title]开启环境的redis扩展[/title]

    1、点击 左侧导航条—软件管理。

    2、选择对应的PHP版本,点击设置:

    3、选择“安装扩展”菜单,选择对应的扩展redis进行安装:

    [title]修改微擎配置文件:[/title]

    编辑 /data/config.php 35行左右 查找如下代码

  • Mac zsh: command not found zsh 所有命令在终端失效

    Mac zsh: command not found zsh 所有命令在终端失效

    前面我们介绍了Mac下采用zsh代替bash 图文教程,最近更新了MacOS ,刚刚发现zsh终端里所有命令全部失效了。

    ?? ~ ls

    zsh: command not found: ls

    ?? ~ dir

    zsh: command not found: dir

    ?? ~ cat .zshrc

    zsh: command not found: cat

    ?? ~ vi .zshrc

    zsh: command not found: vi

    ?? ~ open

    zsh: command not found: open

    网上百度了很久也没有找到答案,不得已google一下,找到了修复方法,以下命令请在终端中运行:
    方法一:

    PATH=/bin:/usr/bin:/usr/local/bin:${PATH}
    export PATH

    方法二:

    exec /bin/zsh

    方法三:

    exec /usr/bin/zsh
  • Chrome for Mac键盘快捷键 总结

    Chrome for Mac键盘快捷键 总结

    标签页和窗口快捷键

    ?-N打开新窗口。
    ?-T打开新标签页。
    ?-Shift-N在隐身模式下打开新窗口。
    按??-O,然后选择文件。在 Google Chrome 浏览器中打开计算机中的文件。
    按住???键,然后点击链接。或用鼠标中键(或鼠标滚轮)点击链接。从后台在新标签页中打开链接。
    按住??-Shift?键,然后点击链接。或按住?Shift?的同时用鼠标中键(或鼠标滚轮)点击链接。在新标签页中打开链接并切换到刚打开的标签页。
    按住?Shift?键,然后点击链接。在新窗口中打开链接。
    ?-Shift-T重新打开上次关闭的标签页。Google Chrome 浏览器可记住最近关闭的 10 个标签页。
    将标签页拖出标签栏。在新窗口中打开标签页。
    将标签页从标签栏拖到现有窗口中。在现有窗口中打开标签页。
    同时按??-Option?和向右箭头键。切换到下一个标签页。
    同时按??-Option?和向左箭头键。切换到上一个标签页。
    ?-W关闭当前标签页或弹出窗口。
    ?-Shift-W关闭当前窗口。
    点击并按住浏览器工具栏中的后退或前进箭头。在新标签页中显示浏览历史记录。
    按?Delete?或??-[转到当前标签页的上一页浏览历史记录。
    按?Shift-Delete?或??-]转到当前标签页的下一页浏览历史记录。
    按住?Shift,然后点击窗口左上方的 + 按钮。最大化窗口。
    ?-M最小化窗口。
    ?-H隐藏 Chrome 浏览器。
    ?-Option-H隐藏其他所有窗口。
    ?-Q关闭 Google Chrome 浏览器。

    Google Chrome 浏览器功能快捷键

    ?-Shift-B打开和关闭书签栏。
    ?-Option-B打开书签管理器。
    ?-,打开“偏好设置”对话框。
    ?-Y打开“历史记录”页面。
    ?-Shift-J打开“下载内容”页面。
    ?-Shift-Delete打开“清除浏览数据”对话框。
    ?-Shift-M在多个用户之间切换。

    地址栏快捷键

    在地址栏中可使用以下快捷键:

    输入搜索字词,然后按?Enter。使用默认搜索引擎进行搜索。
    输入搜索引擎关键字,按空格键,然后输入搜索字词,再按?Enter。使用与关键字相关联的搜索引擎进行搜索。
    首先输入搜索引擎网址,然后在系统提示时按?Tab,输入搜索字词,再按?Enter。使用与网址相关联的搜索引擎进行搜索。
    输入网址,然后按??-Enter。在新后台标签页中打开网址。
    ?-L突出显示网址。
    ?-Option-F将“?”置于地址栏中。在问号后输入搜索字词可用默认搜索引擎执行搜索。
    同时按?Option?和向左箭头键。将光标移到地址栏中的前一个关键字词
    同时按?Option?和向右箭头键。在地址栏中将光标移到下一个关键字词
    同时按?Shift-Option?和向左箭头键。在地址栏中突出显示上一关键字词
    同时按?Shift-Option?和向右箭头键。在地址栏中突出显示下一关键字词
    ?-Delete在地址栏中删除光标前的关键字词
    用键盘上的方向键从地址栏下拉菜单中选择一个条目,然后按?Shift-Fn-Delete。从浏览历史记录中删除所选条目(如果可以)。
    在地址栏菜单中按?Page Up?或?Page Down。在菜单中选择上一条目或下一条目。

    网页快捷键

    ?-P打印当前网页。
    ?-Shift-P打开“网页设置”对话框。
    ?-S保存当前网页。
    ?-Shift-I通过电子邮件发送当前网页。
    ?-R重新加载当前网页。
    ?-,停止加载当前网页。
    ?-F打开查找栏。
    ?-G在查找栏中查找下一条与输入内容相匹配的内容。
    ?-Shift-G?或?Shift-Enter在查找栏中查找上一条与输入内容相匹配的内容。
    ?-E使用所选内容查找
    ?-J跳到所选内容
    ?-Option-I打开开发者工具。
    ?-Option-J打开“JavaScript 控制台”。
    ?-Option-U打开当前网页的源代码。
    按住?Option,然后点击链接。下载链接目标。
    将链接拖到书签栏中。将链接保存为书签。
    ?-D将当前网页保存为书签。
    ?-Shift-D将所有打开的标签页以书签的形式保存在新文件夹中。
    ?-Shift-F在全屏模式下打开网页。再按一次??-Shift-F?可退出全屏模式。
    ?-+放大网页上的所有内容。
    ? 和 –缩小网页上的所有内容。
    ?-0将网页上的所有内容都恢复到正常大小。
    ?-Shift-H在当前标签页中打开主页。
    空格键向下滚动网页。
    ?-Option-F搜索网页。

    文本快捷键

    ?-C将突出显示的内容复制到剪贴板中。
    ?-Option-C将您正在查看的网页的网址复制到剪贴板中。
    ?-V从剪贴板中粘贴内容。
    ?-Shift-Option-V仅粘贴内容,不带源格式。
    ?-X?或?Shift-Delete删除突出显示的内容并将其复制到剪贴板中。
    ?-Z撤消最后一步操作。
    ?-Shift-Z重复最后一步操作。
    ?-X删除突出显示的内容并将其保存到剪贴板中(剪切)。
    ?-A选择当前网页上的所有文本。
    ?-:打开“拼写和语法”对话框。
    ?-;检查当前网页上的拼写和语法
  • Linux之cp/scp命令+scp命令详解

    Linux之cp/scp命令+scp命令详解

    linux 的 scp 命令 可以 在 linux 之间复制 文件 和 目录;

    ==================
    scp 命令
    ==================
    scp 可以在 2个 linux 主机间复制文件;

    命令基本格式:
    scp [可选参数] file_source file_target

    ======
    从 本地 复制到 远程
    ======
    * 复制文件:
    * 命令格式:
    scp local_file remote_username@remote_ip:remote_folder
    或者
    scp local_file remote_username@remote_ip:remote_file
    或者
    scp local_file remote_ip:remote_folder
    或者
    scp local_file remote_ip:remote_file

    第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
    第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
    * 例子:
    scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music
    scp /home/space/music/1.mp3 root@www.cumt.edu.cn:/home/root/others/music/001.mp3
    scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music
    scp /home/space/music/1.mp3 www.cumt.edu.cn:/home/root/others/music/001.mp3

    * 复制目录:
    * 命令格式:
    scp -r local_folder remote_username@remote_ip:remote_folder
    或者
    scp -r local_folder remote_ip:remote_folder

    第1个指定了用户名,命令执行后需要再输入密码;
    第2个没有指定用户名,命令执行后需要输入用户名和密码;
    * 例子:
    scp -r /home/space/music/ root@www.cumt.edu.cn:/home/root/others/
    scp -r /home/space/music/ www.cumt.edu.cn:/home/root/others/

    上面 命令 将 本地 music 目录 复制 到 远程 others 目录下,即复制后有 远程 有 ../others/music/ 目录

    ======
    从 远程 复制到 本地
    ======
    从 远程 复制到 本地,只要将 从 本地 复制到 远程 的命令 的 后2个参数 调换顺序 即可;

    例如:
    scp root@www.cumt.edu.cn:/home/root/others/music /home/space/music/1.mp3
    scp -r www.cumt.edu.cn:/home/root/others/ /home/space/music/

    最简单的应用如下 :

    scp 本地用户名 @IP 地址 : 文件名 1 远程用户名 @IP 地址 : 文件名 2

    [ 本地用户名 @IP 地址 :] 可以不输入 , 可能需要输入远程用户名所对应的密码 .

    可能有用的几个参数 :

    -v 和大多数 linux 命令中的 -v 意思一样 , 用来显示进度 . 可以用来查看连接 , 认证 , 或是配置错误 .

    -C 使能压缩选项 .

    -P 选择端口 . 注意 -p 已经被 rcp 使用 .

    -4 强行使用 IPV4 地址 .

    -6 强行使用 IPV6 地址 .

     

    注意两点:
    1.如果远程服务器防火墙有特殊限制,scp便要走特殊端口,具体用什么端口视情况而定,命令格式如下:
    #scp -p 4588 remote@www.abc.com:/usr/local/sin.sh /home/administrator
    2.使用scp要注意所使用的用户是否具有可读取远程服务器相应文件的权限。

  • 阿里云 ECS 同一账号下 实现 经典网络 专有网络 互相通信

    阿里云 ECS 同一账号下 实现 经典网络 专有网络 互相通信

    今天双11刚好新购了一套阿里云的ECS,但是不巧的是在购买的时候不小心把网络选成了专有网络,之前购买的1台是经典网络,导致他们之间的通讯遇到了麻烦,下面我们记录一下如何实现 阿里云 ECS 同一账号下 实现 经典网络 专有网络 互相通信

    在开始使用ClassicLink迁移方案前,确保您已了解ClassicLink功能的使用限制。详情参考ClassicLink迁移概述。

     

    1. 登录VPC管理控制台。
    2. 在左侧导航栏,单击专有网络。
    3. 单击专有网络的ID链接,进入详情页面。
    4. 单击开启ClassicLink。

      开启ClassicLink

    5. 在弹出的对话框中,单击确定开启该功能。

      enableClassicLink

     

    步骤二 将经典网络ECS链接到VPC

    1. 登录ECS管理控制台。
    2. 在左侧导航栏,单击实例。
    3. 找到目标实例,单击更多?>?连接专有网络。

      您可以批量连接多个同一可用区的经典网络ECS。选择要连接的ECS实例,然后单击列表下方的更多?>?连接专有网络。

      注意:确保ECS的地域和VPC的地域相同,且只能选择经典网络的ECS。

      连接专有网络

    4. 在弹出的对话框中,选择一个专有网络,然后单击确定。

      选择VPC

     

    在经典网络ECS中配置ClassicLink安全组规则时,您可以通过ECS实例详情页面配置,也可以通过安全组详情页面配置。

    通过ECS实例详情页面配置

    1. 登录ECS管理控制台。
    2. 在左侧导航栏,单击实例。
    3. 单击已连接到VPC的ECS实例的ID链接,进入实例详情页面。
    4. 在左侧导航栏,单击本实例安全组。
    5. 单击添加ClassicLink安全组规则。

      addCL

    通过安全组详情页面配置

    1. 登录ECS管理控制台。
    2. 在左侧导航栏,单击网络和安全?>?安全组。
    3. 找到目标安全组,单击配置规则。
    4. 单击添加ClassicLink安全组规则。

      参考ClassicLink安全组规则配置说明进行配置。

      addClassicLink

    ClassicLink安全组规则配置说明

    注意:添加ClassicLink安全组规则后,不需要再在对应的安全组中设置规则。

    配置说明
    选择专有网络安全组选择专有网络的安全组。
    选择经典网络安全组选择经典网络ECS的安全组。
    授权方式选择以下一种授权方式:

    • 经典网络 <=> 专有网络:相互授权访问,推荐使用这种授权方式。
    • 经典网络 => 专有网络:授权经典网络ECS访问专有网络内的云资源。
    • 专有网络 => 经典网络:授权专有网络ECS访问经典网络ECS。
    协议类型和端口范围选择授权通信的协议和端口。端口的输入格式为xx/xx,比如授权80端口,则输入80/80。详情参见添加安全组规则。
    优先级设置该规则的优先级。数字越小,优先级越高。
    描述输入安全组描述。

    ClassicLink安全组

    其它操作

    您可以在ECS控制台查看经典网络ECS到VPC的连接状态,也可以取消经典网络ECS到VPC的连接。对于没有任何连接的VPC,您可以在VPC控制台关闭ClassicLink功能。

    注意:默认控制台中不显示连接状态属性,执行以下操作,添加该属性:

    1. 在实例列表上方,单击图标ECS_自定义列表项(自定义列表项)。
    2. 在自定义列表项对话框中,选择连接状态,并单击确定。

    ECS

  • Discuz 提示(1146) Table ‘*.common_member_archive’ doesn’t exist 的解决方法

    Discuz 提示(1146) Table ‘*.common_member_archive’ doesn’t exist 的解决方法

    Discuz 在后台添加用户时出现如下错误:

    table commom_member_archive doesn’t exist

     

    [title]解决方法 一[/title]

    1、修改 config/config_global.php 当中的

    $_config[admincp][runquery] = 1

    默认值是0 。(为了安全执行完该语句后 确认解决了1146错误后 再将配置该回来 ) 刷新后再输入执行。

    2、在站长–数据库–升级 ( Discuz! 数据库升级 – 请将数据库升级语句粘贴在下面中执行语句 :
    注意pre_ 如果你的数据库前缀是别的请写好。
    复制代码就可以了,若没有找到执行语句的输入窗口 则修改
    为了数据安全执行该语句前建议备份数据
    先备份表pre_common_setting:

    DELETE?FROM?`pre_common_setting`?WHERE?`skey`?=?'membersplit';?
    

    3、更新缓存,就会正常更新啦。

    [title]解决方法 二[/title]

    登陆phpmyadmin 然后找到对应的数据库表。分别对如下表进行备份

    pre_common_member
    pre_common_member_profile
    pre_common_member_field_forum
    pre_common_member_field_home
    pre_common_member_status
    pre_common_member_count

    然后分别复制一份并命名后面加_archive

    最后就可以在 工具-计划任务 – 每日用户表优化 。运行了。如果还报错就继续复制数据表命名加_archive。

  • Mac OS 中是用brew安装mtr诊断网络 图文教程

    Mac OS 中是用brew安装mtr诊断网络 图文教程

    [title]Mtr是什么?[/title]

    Mtr是 Linux中有一个非常棒的网络连通性判断工具,它结合了ping, traceroute,nslookup 的相关特性。

    [title]如何安装Mtr ?[/title]

    如果本地安装了brew 的话,安装很方便了。Mac下的brew切换到国内的镜像源 图文教程

    # 如果此文件路径不存在则需要创建并且赋予普通用户权限
    sudo mkdir /usr/local/sbin && sudo chown ji /usr/local/sbin -R         
    brew install mtr

    ?? ~ brew install mtr

    ==> Downloading https://mirrors.ustc.edu.cn/homebrew-bottles/bottles/mtr-0.92.high_sierra.bottle.tar.gz

    Already downloaded: /Users/ji/Library/Caches/Homebrew/mtr-0.92.high_sierra.bottle.tar.gz

    ==> Pouring mtr-0.92.high_sierra.bottle.tar.gz

    ==> Caveats

    mtr requires root privileges so you will need to run `sudo mtr`.

    You should be certain that you trust any software you grant root privileges.

    ==> Summary

    ?/usr/local/Cellar/mtr/0.92: 12 files, 181.8KB

    这里提示你运行mtr必须是用root权限。

    但是当你是用sudo的时候,会提示出错,因为root的bash路径跟你普通用户的路径是不同的。

    ?? ~ sudo mtr baidu.com

    Password:

    sudo: mtr: command not found

    [title]修改mtr-packet权限[/title]

    sudo chown root /usr/local/Cellar/mtr/0.92/sbin/mtr
    sudo chmod u+s /usr/local/Cellar/mtr/0.92/sbin/mtr

    [title]修改PATH路径[/title]

    echo 'export PATH=/usr/local/sbin' >> ~/.zshrc
    source ~/.zshrc

    注意:我们这里是用的是zsh bash,要根据自己的情况修改对应的bash配置文件。

    至此mtr安装完成。

    [title]如何是用mtr诊断网络?[/title]

    mtr -rw baidu.com
  • Mac 配置 aria2 Chrome插件控制下载 图文教程

    自从迅雷服务器宕机以后,很多文件都无法下载了而且Mac 用户肯定都受够了百度网盘在自己电脑上的糟糕体验,至少我是如此:安装官方的 App,经常下载时中断,有时甚至 Bug 般连续中断,无奈使用浏览器下载,速度却是令人挠头。花点时间来配置 aria2,结合 Chrome,一定让你舒心。

    aria2 是什么?

    aria2 是一款支持多种协议的轻量级命令行下载工具。有以下特性:

    • 多线程连线:aria2 会自动从多个线程下载文件,并充分利用你的带宽;
    • 轻量:运行时不会占用过多资源,根据官方介绍,内存占用通常在 4MB~9MB,使用 BitTorrent 协议,下行速度 2.8MB/s 时 CPU 占用率约 6%;
    • 全功能 BitTorrent 客户端;
    • 支持 RPC 界面远程控制(下文重点介绍)。

    [title]如何下载安装 aria2 ?[/title]

    你可以在?aria2?的?Download?下载对应的安装程序。下载之后直接双击打开安装即可。喜欢用 homebrew 的同学也可以使用命令

    brew install aria2

    来安装,已经安装好 aria2 的同学直接看第五步。

    Mac 用户肯定都受够了百度网盘在自己电脑上的糟糕体验,至少我是如此:安装官方的 App,经常下载时中断,有时甚至 Bug 般连续中断,无奈使用浏览器下载,速度却是令人挠头。花点时间来配置 aria2,结合 Chrome,一定让你舒心。

    [title]设置aria2配置文件 图文教程[/title]

    aria2 提供两种方式使用,一种是直接命令行模式下载,不推荐使用这种方法,推荐使用另外一种 RPC 模式,这种方式 aria 启动之后只会安静的等待下载请求,下载完成后也只会安静的驻留后台不会自动退出。而使用RPC模式推荐做一个配置文件方便使用。我们把配置文件放在?~/.aria2?下,依次输入命令:

    cd ~ && mkdir .aria2 && cd .aria2&& touch aria2.conf

    接着打开 Finder,利用 Shift+Cmd+G 进入路径:~/.aria2/aria2.conf,用文本编辑器打开 aria2.conf,将?以下配置直接拷贝进去:

    #用户名
    #rpc-user=user
    #密码
    #rpc-passwd=passwd
    #上面的认证方式不建议使用,建议使用下面的token方式
    #设置加密的密钥
    #rpc-secret=token
    #允许rpc
    enable-rpc=true
    #允许所有来源, web界面跨域权限需要
    rpc-allow-origin-all=true
    #允许外部访问,false的话只监听本地端口
    rpc-listen-all=true
    #RPC端口, 仅当默认端口被占用时修改
    #rpc-listen-port=6800
    #最大同时下载数(任务数), 路由建议值: 3
    max-concurrent-downloads=5
    #断点续传
    continue=true
    #同服务器连接数
    max-connection-per-server=5
    #最小文件分片大小, 下载线程数上限取决于能分出多少片, 对于小文件重要
    min-split-size=10M
    #单文件最大线程数, 路由建议值: 5
    split=10
    #下载速度限制
    max-overall-download-limit=0
    #单文件速度限制
    max-download-limit=0
    #上传速度限制
    max-overall-upload-limit=0
    #单文件速度限制
    max-upload-limit=0
    #断开速度过慢的连接
    #lowest-speed-limit=0
    #验证用,需要1.16.1之后的release版本
    #referer=*
    #文件保存路径, 默认为当前启动位置
    dir=/Users/ji/Downloads
    #文件缓存, 使用内置的文件缓存, 如果你不相信Linux内核文件缓存和磁盘内置缓存时使用, 需要1.16及以上版本
    #disk-cache=0
    #另一种Linux文件缓存方式, 使用前确保您使用的内核支持此选项, 需要1.15及以上版本(?)
    #enable-mmap=true
    #文件预分配, 能有效降低文件碎片, 提高磁盘性能. 缺点是预分配时间较长
    #所需时间 none < falloc ? trunc ? prealloc, falloc和trunc需要文件系统和内核支持
    file-allocation=prealloc

    默认下载路径的「/Users/xxx/Downloads」可以改为任何你想要的绝对路径。此处写为 Downloads 目录,xxx 请自行替换成你的 Mac 用户名,然后保存,退出编辑器。

    [title]如何将aria2c 启动到 RPC 模式?[/title]

    在终端输入:

    aria2c --conf-path="/Users/xxxxxx/.aria2/aria2.conf" -D

    然后 aria2 就启动了,但是如何搞定百度网盘?还需要在?这里?下载 Chrome 插件。

    [title]如何关闭aria2 ?[/title]

    如果你想关掉后台的 aria2,可以到活动监视器中找到 aria2c 杀掉,也可以在终端输入

    kill aria2

    之后按 Tab 键,aria2 会自动变成进程号,回车即可杀掉它。

  • Mac下的brew切换到国内的镜像源

    Mac下的brew切换到国内的镜像源

    homebrew虽好,但是GFW的原因,你懂的,用起来非常的。。慢 brew update也永远更新不上 今天要装个mongodb,实在受不了了,换可中科大的源,然后飞快。   直接上链接

    homebrew主要分两部分:git repo(位于GitHub)和二进制bottles(位于bintray),这两者在国内访问都不太顺畅。可以替换成国内的镜像,git repo国内镜像就比较多了,可以自行查找,提供二进制镜像的:

    • 中科大镜像(中科大的镜像做的太好了!)

    替换homebrew默认源 [LUG@USTC]
    替换homebrew bottles默认源 [LUG@USTC]

    当然,也可以不打开链接,直接按照下面的方法在终端里敲即可.

    替换homebrew默认源

    cd "$(brew --repo)"
    git remote set-url origin git://mirrors.ustc.edu.cn/brew.git

    Homebrew Bottles源

    Homebrew Bottles是Homebrew提供的二进制代码包,目前镜像站收录了以下仓库:

    • homebrew/homebrew-core
    • homebrew/homebrew-dupes
    • homebrew/homebrew-games
    • homebrew/homebrew-gui
    • homebrew/homebrew-python
    • homebrew/homebrew-php
    • homebrew/homebrew-science
    • homebrew/homebrew-versions
    • homebrew/homebrew-x11

    使用方法

    bash用户

    echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.bash_profile
    source ~/.bash_profile

    zsh用户

    echo 'export HOMEBREW_BOTTLE_DOMAIN=https://mirrors.ustc.edu.cn/homebrew-bottles' >> ~/.zshrc
    source ~/.zshrc

    完成上面两个源的替换后,记得brew update更新一下。

    更新系统,并显示进度

    brew upgrade --verbose
  • PHP 数字前面补零 固定位数补0

    PHP 数字前面补零 固定位数补0

    在处理订单编号的时候,需要固定位数的数字,比如需要固定四位数格式:

    1->0001

    56->0056288->0288

    1992->1992

    可以使用php内置函数str_pad() 函数把字符串填充为新的长度。

    str_pad(string,length,pad_string,pad_type) //参数 描述 string //必需。规定要填充的字符串。

    length //必需。规定新的字符串长度。如果该值小于字符串的原始长度,则不进行任何操作。

    pad_string //可选。规定供填充使用的字符串。默认是空白。

    pad_type //可选。规定填充字符串的哪边。 //可能的值:

    STR_PAD_BOTH – //填充字符串的两侧。如果不是偶数,则右侧获得额外的填充。

    STR_PAD_LEFT – //填充字符串的左侧。

    STR_PAD_RIGHT – //填充字符串的右侧。默认。

    例子:

    $num=128;
    $num=str_pad($num,4,"0",STR_PAD_LEFT);   
    echo $num;

    输出

    0128

  • WordPress WPDB SQL注入漏洞 安全公告

    WordPress WPDB SQL注入漏洞 安全公告

    近日,国家信息安全漏洞共享平台(CNVD)收录了WordPress WPDB SQL注入漏洞(CNVD-2017-32143)。远程攻击者利用该漏洞可造成SQL注入攻击,获取数据库敏感信息。漏洞的详细细节已公开,近期被不法分子利用进行出现大规模攻击尝试的可能性较大。

    一、漏洞情况分析

    WordPress是使用PHP语言和MySQL数据库开发的,世界上使用最广泛的博客系统,并逐步演化成一款内容管理软件。
    2017年10月31日,WordPress官方发布了WordPress安全更新并修复了一处SQL注入漏洞,即$wpdb-prepare()函数可以创建无法预测且不安全的查询,从而导致潜在的SQL注入(SQLi),但WordPress核心并不容易直接受到该漏洞的影响。CNVD对上述漏洞的综合评级为“高危”。

    WordPress 4.8.3中修复了一个重要的SQL注入漏洞,这个漏洞于2017年9月20日通过hackerone报给WordPress官方。

    影响写法

    以下$wpdb写法受该漏洞影响:

    不要将用户的输入传递给查询端,如以下写法1

    $where?=?$wpdb->prepare("?WHERE?foo?=?%s",?$_GET['data']);
    $query?=?$wpdb->prepare("SELECT?*?FROM?something?$where?LIMIT?%d,?%d",?1,?2);

    理论上写法2也是不安全的:

    $where?=?"WHERE?foo?=?'"?.?esc_sql($_GET['data'])?.?"'";
    $query?=?$wpdb->prepare("SELECT?*?FROM?something?$where?LIMIT?%d,?%d",?1,?2);

    应该单独的构建查询和参数,然后通过prepare方法执行。如以下写法3

    $where = "WHERE foo = %s";
    $args = [$_GET['data']];
    $args[] = 1;
    $args[] = 2;
    $query = $wpdb->prepare("SELECT * FROM something $where LIMIT %d, %d", $args);

    缺陷分析:

    为了了解本次报告中关于$wpdb的容易受攻击的代码,我们来跟进分析WordPress内部关于WPDB::prepare的部分。先来看源码(4.8.2版本之前)

    public?function?prepare(?$query,?$args?)?{
    ????if?(?is_null(?$query?)?)
    ????????return;
    ????//?This?is?not?meant?to?be?foolproof?--?but?it?will?catch?obviously?incorrect?usage.
    ????if?(?strpos(?$query,?'%'?)?===?false?)?{
    ????????_doing_it_wrong(?'wpdb::prepare',?sprintf(?__(?'The?query?argument?of?%s?must?have?a?placeholder.'?),?'wpdb::prepare()'?),?'3.9.0'?);
    ????}
    ????$args?=?func_get_args();
    ????array_shift(?$args?);
    ????//?If?args?were?passed?as?an?array?(as?in?vsprintf),?move?them?up
    ????if?(?isset(?$args[0]?)?&&?is_array($args[0])?)
    ????????$args?=?$args[0];
    ????$query?=?str_replace(?"'%s'",?'%s',?$query?);?//?in?case?someone?mistakenly?already?singlequoted?it
    ????$query?=?str_replace(?'"%s"',?'%s',?$query?);?//?doublequote?unquoting
    ????$query?=?preg_replace(?'|(?<!%)%f|'?,?'%F',?$query?);?//?Force?floats?to?be?locale?unaware
    ????$query?=?preg_replace(?'|(?<!%)%s|',?"'%s'",?$query?);?//?quote?the?strings,?avoiding?escaped?strings?like?%%s
    ????array_walk(?$args,?array(?$this,?'escape_by_ref'?)?);
    ????return?@vsprintf(?$query,?$args?);
    }

     

    这里需要注意三点

    1.通过vsprintf格式化字符串,用$args替换占位符,并返回格式化后的一个字符串

    2.利用str_replace函数正确处理$query中的占位符

    3.如果传递的是参数,该参数是一个数组,那么它将用该数组的值替换参数。

    总之,意思是调用$wpdb->prepare($sql, [1, 2])与调用$wpdb->prepare($sql, 1, 2)是相同的,这点很重要。

    如以下的代码

    $items?=?implode(",?",?array_map([$wpdb,?'_real_escape'],?$_GET['items']));
    $sql?=?"SELECT?*?FROM?foo?WHERE?bar?IN?($items)?AND?baz?=?%s";
    $query?=?$wpdb->prepare($sql,?$_GET['baz']);
    这里涉及到vsprintf的一个小特性
    vsprintf('%s,?%d,?%s',?["a",?1,?"b"]);?//?"a,?1,?b"
    vsprintf('%s,?%d,?%1$s',?["a",?2,?"b"]);?//?"a,?2,?a"

    注意,%n$s不会读取下一个参数,而是读取第n个位置的参数

    我们可以基于这个验证上面的查询,假设我们发送以下请求信息给服务端

    $_GET['items']?=?['%1$s'];
    $_GET['baz']?=?"test";

    现在,查询将被改为SELECT * FROM foo WHERE bar IN (‘test’) AND baz = ‘test’;但这改变了查询的含义,为了更明显的说明sql注入,可以构造这样的请求数据

    $_GET['items']?=?['%1$c)?OR?1?=?1?/*'];
    $_GET['baz']?=?39;

    需要说明的是:sprintf还接受另一种类型的参数:%c它的作用就像chr()将十进制数字转换成一个字符。这里ASCII表39是’(单引号)的ASCII码。那么整个查询执行的sql语句是:

    SELECT?*?FROM?foo?WHERE?bar?IN?('')?OR?1?=?1?/*'?AND?baz?=?'test';

    事实证明,该缺陷也存在WordPress的核心文件/wp-includes/meta.php。

    if?(?$delete_all?)?{
    ??$value_clause?=?'';
    ??if?(?''?!==?$meta_value?&&?null?!==?$meta_value?&&?false?!==?$meta_value?)?{
    ????$value_clause?=?$wpdb->prepare(?"?AND?meta_value?=?%s",?$meta_value?);
    ??}
    ??$object_ids?=?$wpdb->get_col(?$wpdb->prepare(?"SELECT?$type_column?FROM?$table?WHERE?meta_key?=?%s?$value_clause",?$meta_key?)?);
    }

    二、漏洞影响范围

    漏洞影响WordPress 4.8.2及之前版本。

    三、漏洞修复建议

    支持自动更新的用户可以通过点击后台的仪表盘更新到4.8.3版本,也可手动下载更新:https://wordpress.org/download/
    附:参考链接:

    WordPress 4.8.3 Security Release


    https://blog.ircmaxell.com/2017/10/disclosure-wordpress-wpdb-sql-injection-technical.html
    http://www.cnvd.org.cn/flaw/show/CNVD-2017-32143

WeChat
↑