作为一个前端渣渣,最近在写js代码的时候,开始使用一些ES6的新特性,结果到箭头函数部分“掉坑”了。网上大部分都说箭头函数怎么用,而很少说箭头什么时候 不要用,所以这里翻译一篇文章来说说什么时候不要用的问题。

原文地址,向原作者表示感谢。

阅读全文

原文地址,向原作者表示感谢。由于本人并没学习过angular,所以翻译有误的地方恳请指正。


我已经受够了JS社区的那帮二货,我只是想使用Django作为后端结合Angular做一个简单的、可复用的项目,却没有一个简明的指导教我如何做到。如果你也为此挣扎,这里有一份指南教你如何构建一个由Django作为后端、Webpack进行组织的Angular程序。

问题

我想开发一个Angular1.1.x的项目并使用Django作为后端提供数据,我喜欢使用Django REST Framework(DRF)来构造RESTful API。我也想打包需要的JavaScript资源。目前,我打算使用单一的服务器上运行这个程序。

依赖

  • Python 2.x
  • a virtual Python environment
  • Django 1.9.x (pip install django)
  • npm 2.15.8+
  • Webpack 1.13.x (sudo npm i -g webpack)
  • ESLint 2.13.1+ (sudo npm i -g eslint)
  • NodeJS 4.4.7+
阅读全文

原文地址,原文中Hierarchical Data直译为 分层结构,这里我翻译成 树状结构

补充资源:

  1. https://django-mptt.github.io/django-mptt/ ,如果你也使用python和django,这个是现成的APP。

另外,个人觉得这种方法对于搜索的效率提升最大,而相应的新增、删除等操作则会变慢,个人猜测未经测试。

个人总结的核心:如果一个节点A是节点B的子节点,那么A的左值一定大于B的左值,A的右值一定小于B的右值。或者说,A的左值一定在B的左值和右值之间。
阅读全文

目前网上的关于Django-REST-framework中文文档教程大多数都是你抄我我抄你,也找不出到底是出自谁手以及哪个版本的文档翻译了。于是我决定将自己阅读文档的翻译记录下来,供有需要的人阅读。

但经过排版,发现这种由多章组成的系列教程,在博客上怎么弄都不方便看,所以教程直接放到gitbook上,请移步至:

https://darkcooking.gitbooks.io/django-rest-framework-cn/content/

评论和分享

真是惭愧,直到今日才读到这篇文章,原文在这里。我本人大学课程中唯一没选修的语言就是Java,不知什么原因对于Java就是不感冒。虽然由于某些原因做了一阵android的开发,但是这段经历更是让我坚定了“能不写java程序就不写java程序”的想法。这里无意引起“语言之战”,仅是个人喜好问题罢了。

阅读全文

官网在这里,英语好的直接去看官网文档吧,我是英语渣只能翻译个大概;另外注意本文翻译时间,可能你看到的时候官网已经更新了。


flask-socketio赋予了flask程序支持服务端和客户端间双向低延迟通讯的能力,客户端可以使用 SocketIO 库或任何支持与服务端建立长链接的兼容库。

安装

可以直接使用pip安装:

1
pip install flask-socketio

依赖

自从1.0版开始,这个扩展完全兼容了python2.7和python3.3+版本。异步服务的支持基于下面3个选择中的一个:

  • eventlet 是3个选项中性能最高的,同时支持长轮循(long-polling)和WebSocket。
  • gevent 是在以前版本中使用的框架,支持长轮循,如果想支持WebSocket的话需要同时安装gevent-websocket 库。使用gevent和gevent-websocket结合性能也不错,但略低于eventlet。
  • flask 基于Werkzeug的开发服务也能用,不过性能上不如上面2个选项,所以它应该只用于开发时使用。这个选项只支持长轮循。
    本扩展将自动检测哪些异步框架被安装,默认首选eventlet,其次是gevent,最后是flask自带的开发服务。
    对于客户端来说,可以使用官方的Socket.Io来建立于服务端的链接,也有使用swift和c++写成的客户端。非官方的客户端也能工作,只要它实现了Socket.IO 协议。

目前的局限

目前flask-socketio只能同时运行在单个进程中(这里应该指的是一个进程中仅能存在一个实例的意思,而非只能开启一个进程吧…),解决这个限制的工作正在进行中。
(关于升级变化、以及从老版本迁移到新版的注意事项我就不翻译了,因为没用过老版本)

阅读全文

CentOS7和fedora中的默认防火墙都变成了firewalld,当然你也可以选择禁用这个并自己安装iptables,下面内容原文:这里,而且只翻译我用到的部分文章。原文中还展示了如何使用图形界面进行配置,不过作为键盘爱好者,能不用鼠标的就尽量不用鼠标了,直接上命令行操作。


4.5.4 理解域概念

firewalld可以根据不同的信任级别,将处于不同域内的设备进行分离。NetworkManager用于管理firewalld将接口分配到哪个域中,可以通过NetworkManager界面或filrewall-config工具来进行设置。

默认的配置文件位于/etc/firewalld/可以快速的应用在网络接口上,这里有一份关于域的简短的说明:

dorp:任何入站请求都被忽略,无任何回复,只有发起的网络链接请求被放行。

block:任何入站请求都被拒绝,ipv4协议回复”icmp-host-prohibited”消息,ipv6协议回复”icmp6-adm-prohibited”,只有从系统内部发出的链接请求才被放行。

(个人感觉上面两个区别就是在于有无回复,对内的话用block、对外用dorp好一些,让外部扫描费点劲才知道被防火墙过滤了)

public:为在公共场所准备,你不相信网络中的其他电脑不会对你的电脑造成伤害,只有被选定的入站链接被接受。

external:为有伪装的外部网络特别是路由器准备,你不相信网络中的其他电脑不会对你的电脑造成伤害,只有被选定的入站链接被接受。

dmz:为那些处于隔离区(demilitarized zone)可以访问部分内部网络的电脑准备,只有被选定的入站链接被接受。

work:为工作域的电脑准备,你相信网络中其他电脑不会对你的电脑造成伤害,只有被选定的入站链接被接受。

home:为家庭域的电脑准备,你相信网络中其他电脑不会对你的电脑造成伤害,只有被选定的入站链接被接受。

internal:为内部域的电脑准备,你相信网络中其他电脑不会对你的电脑造成伤害,只有被选定的入站链接被接受。

trusted:接受全部请求。

你可以指定一个域为默认域,当一个新接口被添加到NetworkManager中时,它将被分配到默认域中。在默认情况下public为默认域。

4.5.6 理解预设服务

如果一个服务可用的话,它应该有一份本地端口和目标端口的列表,同时防火墙辅助模块自动载入这份列表。使用预设服务可以让用户轻松控制服务是否可以被访问,通过使用预设服务或用户自定义服务的方式来控制访问权限而不是通过管理端口或端口范围也许让管理员更加轻松。(翻译的不好,意思就是只记mysql而不用记3306端口了)服务的配置选项和通用文件信息在firewalld.service(5)中有介绍。服务被指定使用xml文件格式并且命名为service-name.xml这种格式。
可以通过下面的命令查看默认的预设服务:ls /usr/lib/firewalld/services/

不要修改/usr/lib/firewalld/services中的文件,只有/etc/firewalld/services/才可以被修改。

查看系统或用户创建的服务可以使用:ls /etc/firewalld/services/

服务可以通过图形界面或编辑/etc/firewalld/services/中的文件来新增或删除,如果你还没添加或修改过任何一个服务,/etc/firewalld/services/目录下是没有任何文件的,可以把从/usr/lib/firewalld/services/中复制出一个文件作为模板,比如:
cp /usr/lib/firewalld/services/[service].xml /etc/firewalld/services/[service].xml

你也许想新建一个文件,firewalld更喜欢新文件在/etc/firewalld/services/中而非/usr/lib/firewalld/services/中。

4.5.7 理解直接接口

firewalld中有一个功能叫做”直接接口“,它能直接通过iptables、ip6tables、ebtables的规则,这是为应用准备而不是为用户准备的。如果你对iptables不是十分熟悉的话用直接接口是很危险的,这无意间可能导致防火墙规则漏洞。某些规则被添加时仍然被firewalld所追踪,所以还可以用firewalld查看那些应用程序使用直接接口引起变化的规则。可以通过在firewalld-cmd 添加–direct来使用直接接口。

直接接口的目的是让服务或程序在运行时添加特定的防火墙规则, 通过使用–permanent参数或修改/etc/firewalld/direct.xml文件可以让这些规则持久化。如果规则没被持久化,则每次重启、重加载时都要重新添加。

4.5.15.3 通过命令行查看firewalld

查看状态:
firewall-cmd --state

查看当前域:

1
2
3
firewall-cmd --get-active-zones
public
interfaces: em1

根据接口查看所属域:

1
2
firewall-cmd --get-zone-of-interface=em1
public

查看某域下所有接口:

1
2
firewall-cmd --zone=public --list-interfaces
em1 wlan0

这个命令的结果来自Networkmanager而且只显示接口不显示链接。

查看某域的所有设定:

1
2
3
4
5
6
7
firewall-cmd --zone=public --list-all
public
interfaces:
services: mdns dhcpv6-client ssh
ports:
forward-ports:
icmp-blocks: source-quench

查看当前哪些服务被加载:

1
2
firewall-cmd --get-services
cluster-suite pop3s bacula-client smtp ipp radius bacula ftp mdns samba dhcpv6-client dns openvpn imaps samba-client http https ntp vnc-server telnet libvirt ssh ipsec ipp-client amanda-client tftp-client nfs tftp libvirt-tls

这将展示出所有位于/usr/lib/firewalld/services/的预设服务和当前载入的所有用户自定义服务,注意xml文件名必须是service-name.xml。如果用户自定义服务以及创建但没被加载,可以使用命令:firewall-cmd --permanent --get-services

这个命令将展示所有的服务,包括未被加载的那些位于/etc/firewalld/services/的服务。

4.5.15.4 通过命令行设置firewalld

4.5.15.4.1 忽略所有包

使用下面的命令忽略所有入站和出站请求:firewall-cmd --panic-on

已经建立的链接将在会话过期后被终止。重新接受所有请求:firewall-cmd --panic-off

查看panic状态:firewall-cmd --query-panic

yes为启用,no为关闭。

4.5.15.4.2 重载防火墙

重载防火墙但并不打断用户链接:firewall-cmd --reload

重载防火墙同时打断用户链接:firewall-cmd --complete-reload

通常情况这个命令只有在防火墙服务出问题了才被使用。

4.5.15.4.3 通过命令行添加新接口到某个域

更改接口到某个域:firewall-cmd --zone=public --add-interface=em1

从域中删除某接口:firewall-cmd --zone=dmz --change-interface=em1

如果想要持久化,记得添加–permanent参数以及重载防火墙:firewall-cmd --zone=public --remove-interface=em1

4.5.15.4.4 通过修改文件添加新接口到某个域

编辑ifcfg-em1文件(一般位于/ets/sysconfig/network-scripts目录),添加
ZONE=work

如果你省略zone或zone=””,默认将使用默认域。修改完成后NetworkManager将自动重连并设置相应域。

4.5.15.4.5 通过修改配置文件修改默认域

编辑 /etc/firewalld/firewalld.conf

1
2
3
4
default zone
# The default zone used if an empty zone string is used.
# Default: public
DefaultZone=home

保存后重载防火墙,这将中断所有链接。

4.5.15.4.6 通过命令行修改默认域

使用命令:firewall-cmd --set-default-zone=public

将立即生效而不需要重载防火墙 。

4.5.15.4.7 通过命令行开放端口

首先列出所有开放的端口,以dmz域为例:firewall-cmd --zone=dmz --list-ports

注意,这里不会展示被–add-services参数打开的端口。

开放某域内的端口,比如开放dmz域的8080端口,命令如下:firewall-cmd --zone=dmz --add-port=8080/tcp

开放某段的端口,命令如下:firewall-cmd --zone=public --add-port=5060-5065/udp

如果需要的话,记得使用--permanent参数进行持久化。

4.5.15.4.8 通过命令行添加删除服务到某域

这里以smtp服务添加到work域为例:

1
2
firewall-cmd --zone=work --add-service=smtp
firewall-cmd --zone=work --remove-service=smtp

同样的添加--permanent进行持久化,如果你使用了这个参数并想立即生效,请重载防火墙。

4.5.15.4.9 通过修改xml文件添加删除服务到某域

首先查看默认域文件:

1
2
3
ls /usr/lib/firewalld/zones/
block.xml drop.xml home.xml public.xml work.xml
dmz.xml external.xml internal.xml trusted.xml

不要编辑这些文件,如果/etc/firewalld/zones/目录中没有等效文件这些文件将被使用。

想查看哪些域文件被修改,使用:

1
2
ls /etc/firewalld/zones/
external.xml public.xml public.xml.old

这里我们以向work域添加服务为例,首先:

1
cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/

现在可以编辑位于/etc/firewalld/zones下的文件了,以添加smtp服务为例,修改work.xml添加:<service name="smtp"/>

如果你删除了这个文件,那么/usr/lib/firewalld/zones/中的文件将被使用。

删除操作和添加相反,删除我们编辑的xml文件中添加的行就行了,就不翻了。

4.5.14.4.12 ip地址伪装

查看:firewall-cmd --zone=external --query-masquerade

启用:firewall-cmd --zone=external --add-masquerade

禁用:firewall-cmd --zone=external --remove-masquerade

记得添加--permanent以及重载防火墙。

4.5.14.4.12 端口转发

想要进行端口转发,先要启用ip地址伪装,然后使用:firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=3753

上面的例子中把external域中22端口转发给本机的3753端口,协议为tcp。其中端口可以是一个端口也可以是端口范围,而proto则只能是tcp或udp的协议中的一个。

如果是转发给另一个ip,通常是内部Ip并且端口不变,则firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.0.2.55

如果端口也变了:firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.0.2.55

记得添加--permanent以及重载防火墙。

4.5.14.6 使用直接接口

车轱辘话略过,见上面

4.5.14.6.1 添加用户规则

添加规则链

1
2
firewall-cmd --direct --add-rule ipv4 filter IN_public_allow \
0 -m tcp -p tcp --dport 666 -j ACCEPT

4.5.14.6.2 删除用户规则

1
2
firewall-cmd --direct --remove-rule ipv4 filter IN_public_allow \
0 -m tcp -p tcp --dport 666 -j ACCEPT

4.5.14.6.3 展示用户规则

1
firewall-cmd --direct --get-rules ipv4 filter IN_public_allow

如果需要的话,同样使用--permanent以及重载防火墙。


翻到后面发现车轮话太多了,就只进行了意译,而且个人也就使用开放端口、转发一类的常见操作,高深地方就不不翻译了,用到了在说吧。注意的就是如果不加--permanent参数则会实时生效,但重启或重加载后会失效。加--permanent参数则不会实时生效,需要重新reload。
再补充一些东西,类似于黑白名单机制,比如我想根据来源ip来分配不同的域规则,则相关命令如下

1
2
3
4
5
firewall-cmd --permanent --zone=public --list-sources
firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32
firewall-cmd --permanent --zone=public --add-port=1-22/tcp
firewall-cmd --permanent --zone=public --add-port=1-22/udp

有add-source、port自然就会有remove-source、port了,当你只想让某些指定的ip访问某些服务的话,就可以把这些ip放到相应的域内,加载规则如下:

  1. 如果一个包的来源已经绑定在某个域内,则使用这个域的规则。
  2. 如果一个包的来源没绑定任何一个域,但来源访问的接口绑定了某个域(比如eth0),则使用端口绑定的域规则。
  3. 如果一个包的来源和来源接口都没绑定某个域,则使用默认域规则。
    这里还要注意,一个ip地址只能属于一个域,否则会提示域冲突。

评论和分享

原文:http://www.percona.com/blog/2014/01/28/10-mysql-settings-to-tune-after-installation/


当我们被聘请去做MYSQL性能审计时,我们被期望审查MYSQL配置文件并提出改进建议。在大多数情况下很多人都感到惊奇,因为我们仅仅在成百上千的变量中改变了很少的一部分。这篇文章的目的就是告诉你一些至关重要的设置项。
我们在几年前曾经在博客中给出过一些建议,但从那之后MYSQL的世界发生了很多改变!

阅读全文

这是翻译系列的第一篇,如有不足希望大家指出。 原文:http://www.acunetix.com/blog/articles/choosing-a-web-vulnerability-scanner/


评估一个网站漏洞扫描器的好坏并不容易,随着大量的开源或商业的扫描器不断涌出,它们都声称自己提供了最好的扫描功能,所以选择一个好的扫描器是一个重要而又艰难的决定。在这篇文章中,我们提供了几个当您选择扫描器时可以考虑的关键之处。

易用

漏洞扫描早就不再是一件容易的事情,虽然(希望)很多人都了解如SQL注入、XSS一类的基础知识,但并不是所有操作扫描器的人都是相关专家。理想情况下,你的大部分时间应该用于修复扫描器发现的漏洞而不是学习如何使用扫描器。

有广泛的安全测试

漏洞扫描器应该能识别出更多的漏洞。尽管现在大多数的扫描器都能识别出一些基本、常见的漏洞,但你选择的扫描器最好也能识别出那些不太常见的漏洞。

能识别漏洞变种

一个好的扫描器除了能识别出大量的漏洞外,应该也能识别检测出这些漏洞的相关变种。用XSS举例来说,开发者可能修复了基本的XSS漏洞,但却不能防止经过编码后XSS漏洞攻击。

覆盖更多的网络技术

(PS:应该是指更加新一些的扫描器) 漏洞扫描的第一步是抓取网站页面,爬虫将识别所有组成页面的表单以及元素。但随着网站动态技术的发展,这个目标并不像想象中那么简单了。特别是越来越多的网站使用如:javascrept、HTML5、类似Google Web Toolkit 一类的网络框架、单一页面程序或其他前沿的技术。 记住,漏洞扫描器只能识别出在爬虫阶段被确定的页面或元素,所以你应该选择那些能够识别目标网站使用什么技术的漏洞扫描器,并且开发者能够频繁的更新以便于跟上最新的技术。

智能扫描

我们可以把每项扫描看成是一个孤岛,这也就意味着每项扫描结果和其他的扫描是不相关的。在某些理想情况下,一项扫描的结果应该可以当作另一扫描的输入。 举个例子来说,在扫描过程中识别出了一个邮箱地址,在理想过程中这个邮箱地址应该在扫描过程中被使用,就像用于网站中的登录表单中。再举个例子,扫描过程中发现了某些开发工具,比如版本控制工具(GIT或者SVN),网站也会尝试解析这些控制工具的内容,而这些内容中常常包含一些敏感信息。

覆盖内容管理系统

很多的组织使用内容管理系统(CMS)去频繁的发布文章等内容,常见的CMS包括WordPress, Joomla, Drupal等。它们每一个都包含相应的漏洞,目标网站也许就使用其中的一个,因此漏洞扫描器应该能够检查它们的配置错误以及漏洞。

支持移动终端

(PS:检测那些支持移动端的网站而不是这个扫描器有手机版) 现在很多网站对移动终端提供了相应的版本,它们将在智能手机或平板上自动加载,并且提供了和PC版一样的功能。这些移动版本或许存在漏洞,确保你的扫描器也能扫描这些移动版本的网站程序。

灰盒测试

很多漏洞扫描器提供了黑盒测试以便于在没有源码的情况下进行漏洞扫描,而灰盒测试则在扫描时在扫描器和网站之间安装了一层代理。灰盒测试通过更加完全的覆盖以及准许扫描者自定义更多的漏洞验证、特征码等信息来增加扫描的成功率。比如一段存在漏洞的后端源码或者包含SQL注入的SQL语句。

手工测试工具

扫描器在完成一个扫描前是不能停止的,在某些情况下你可能需要修改扫描出的某些东西。理想情况下扫描器在产品中集成了某些工具,准许你在手工测试时候简单的重新利用自动测试产生的结果。

警惕零误报

尽管现在多数的漏洞扫描器都很诚实并且工作的很好,但你仍然需要注意扫描器没扫描出任何漏洞的情况。一种常见的想法是认为扫描器应该达到零误报的情况,然而零误报的扫描器是没有多大用处的,事实是任何漏洞扫描器都达不到100%的准确率。如果一个扫描器声称自己零误报,要么是它们没作出全面的检测,要么是没全部展示。 2015年是Acunetix Web Vulnerability Scanner10周岁生日,10年来我们不断的对其开发并优化,使其成为了扫描器市场中的领跑者。 (PS:这广告是原文中的…)

评论和分享

  • 第 1 页 共 1 页

Roy.S

微信公众号:hi-roy


野生程序员


China