招聘高级安全开发工程师 (北京-爱奇艺)

爱奇艺安全团队在北京招聘开发工程师,欢迎投递简历。 相应的开发实习生职位,也依然可以申请。

岗位职责

负责内部安全服务的功能开发、持续优化

基本要求

  • 2~5年Python后台开发经验,掌握Django等Web框架
  • 具备相对完整的知识体系:操作系统、数据结构、算法、网络、数据库
  • 熟练使用Linux,可编写shell脚本
  • 熟练使用Python,能够设计实现相对复杂的工程。具备良好的代码风格,掌握程序调试和性能优化
  • 熟练使用MySQL、Redis、MongoDB等数据库,了解常见的数据库优化
  • 掌握JavaScript和CSS:Jquery、AngularJS、Bootstrap等
  • 了解ES、kafka、hadoop、hbase、hive、docker
  • CS和软件工程优先。 有一定漏洞挖掘、应急响应经验者优先。 责任心强

薪资福利

视面试结果

简历投递

lijiejie[at]qiyi.com

招聘安全实习生(北京-中关村) 2019-03(仍然有效)

爱奇艺安全 招聘安全实习生: 渗透测试、安全开发、代码审计

实习地址: 北京-海淀-中关村

渗透测试: 理解常见安全漏洞,会使用常见工具,有漏洞挖掘、进一步渗透的基本思路

安全开发: 熟练掌握 Go/Python/Java 中的一门语言,有一定的攻防基础知识。 参与 HIDS、扫描器、堡垒机等内部服务开发

代码审计: 白盒代码扫描report review,参与持续优化内部的代码扫描服务

请投递简历至 lijiejie[at]qiyi.com

Python子进程logging config在Win和Linux下表现不一致的问题

Python父进程通过logging.basicConfig,设定日志文件的路径,子进程再次通过basicConfig设定另一个新的路径。这个操作,在Windows系统和Linux下表现不一致。

区别在于,Windows下将打开不同的文件句柄,写入2个不同的文件 。而在Linux下,则config看起来无效,子进程和父进程使用同一个文件描述符,第二次config无效。(解决的方法文末补充)

import logging
import os
import multiprocessing
import threading

cwd = os.getcwd()


def set_log(log_file_path):
    logging.basicConfig(filename=log_file_path,
                        filemode='a+',
                        format='%(message)s',
                        level=logging.INFO)
    logging.info('%s:  %s' % (logging.root, log_file_path) )


def test_func():
    set_log(os.path.join(cwd, 'test2.log'))


class TestThread(threading.Thread):
    def __init__(self):
        p = multiprocessing.Process(target=test_func)
        p.start()


if __name__ == '__main__':
    set_log(os.path.join(cwd, 'test.log'))
    TestThread()

这个程序在Windows的执行结果是

logging.RootLogger object at 0x0000000002610C18>:  C:\test\test.log
logging.RootLogger object at 0x000000000276C7B8>:  C:\test\test2.log

可以看到,日志写入了两个不同的文件。并且Logger ID不一样

在Linux下的执行结果是

[root@cyberivy-web-dev002-whdx test]# ls *.log
test.log
[root@cyberivy-web-dev002-whdx test]# cat test.log 
:  /root/test/test.log
:  /root/test/test2.log

两个进程的日志都写到了test.log中。 并且 Logger ID 和 fd是一样的

解决的办法

子进程在set_log之前,先 reload(logging), test_func变成

def test_func():
    reload(logging)
    set_log(os.path.join(cwd, 'test2.log'))

修改之后,在Linux执行,日志同样会写入不同的文件

[root@cyberivy-web-dev002-whdx test]# ls *.log
test2.log  test.log
[root@cyberivy-web-dev002-whdx test]# cat *.log
logging.RootLogger object at 0x1df28d0>:  /root/test/test2.log
logging.RootLogger object at 0x1d80bd0>:  /root/test/test.log

Python浅复制导致for loop删除剩下偶数位元素的问题

昨天群里,大家聊到了一个面试题,关于 浅复制 (shallow copy )的。 相信很多人都写过类似的错误代码。

items = list(range(1, 11))

while items:
    tmp_items = items     # tmp_items referred to items
    for i in tmp_items:
        items.remove(i)
    print items

通过一个for loop遍历删除列表中的元素(这里示例1到10)。最终执行的结果是

[2, 4, 6, 8, 10]
[4, 8]
[8]
[]

可以看到,每次循环,只有奇数位的数字被从列表移除了,偶数位的数字被保留下来。

这跟列表是一个链表结构有关系。

第二,这里的 tmp_items = items 是浅复制, tmp_items只是items的引用

迭代器在遍历列表的时候,从head开始

head -> pointer1 -> 1
        pointer2 -> 2
        ...
        pointer10 -> 10

循环开始,首先删除第一个元素(1),此时,对应的head指针移动到指针2

head -> pointer2 -> 2
        ...
        pointer10 -> 10

继续遍历时, head->next 指向的是已经是元素3。    于是,最终只有奇数位置的元素被移除了。

招聘安全实习生(北京-中关村) 2018-10

招聘安全实习生一名,欢迎投递简历。

地点: 北京 – 中关村

技能要求:

1. 理解常见web漏洞:SQL注入、XSS、CSRF、SSRF、上传漏洞、代码(命令)执行、常见业务逻辑缺陷等

2. 熟练使用常见的安全工具: awvs sqlmap nmap burpsuite appscan等

3. 有一定的渗透测试经验,了解常见漏洞的测试流程、利用、修复

4. 掌握Java 或 C++基础。 熟练使用一门脚本语言Python、Go等, 熟悉 Linux(shell scripts)。

5. 有Android/iOS客户端漏洞挖掘经验可加分,  熟悉主流web框架可加分,  有代码安全审计经验可加分

6. 良好的沟通能力,自我驱动学习,善于用代码解决问题

实习期间工作内容:

渗透测试(挖漏洞)    白盒代码审计    安全服务开发
投递邮箱:

python -c “import base64; print base64.b64decode(‘bGlqaWVqaWVAcWl5aS5jb20=’)”

QQ:

echo OTE4MjI2Mwo=|base64 -d