nodejs的安装方式有很多种,最简单的方式莫过于直接在官网直接点击install。
本人刚开始正式玩nodejs的时候,也是直接按照官网上的方式安装,但是后来随着nodejs的深入,发现了各种令人蛋疼的问题:
- 不方便更换版本
- 不方便卸载
- …
后来在github上发现了nvm,这货挺好用的,管理nodejs很方便:
- 一开始不要安装nodejs(如果之前装了nodejs,想办法卸掉…),安装nvm
- 看看nvm官方文档,随便玩转nodejs
有了nvm,想卸载就卸载,想换版本就换版本…
如果能在系统偏好设置 - 用户与群组 - 登录项
中找到自启动任务,那么把它删掉就可以了;如果找不到,就继续看下文。
mac os x系统中,自启动任务一般都会在以下某个目录生成一个或多个plist文件:
打开终端,进入到以上几个目录,找到对应的plist文件(有的程序可能有多个plist),然后执行以下命令就可以删除自启动任务:
1 | launchctl unload -w x.xx.xxx.plist |
重启mac,该任务应该不会再自动启动了!
在删除自启动任务时,可能会出现以下问题:
launchctl error unloading
出现这种错误,一般情况下都是因为该自启动任务所属用户与调用unload的用户(也就是本次登录的用户)不符,这个时候可以尝试添加sudo
。
referer
是指请求来源,很多网站通过这个来判断用户是从哪个页面/网站过来的。
referer
很容易泄露,经常会被攻击者利用,一般情况下,可以采用如下方式来进行referer
的保护:
rel="noreferer"
属性,可以让请求不带referer
1 | <a href="http://xxx.com" rel="noreferer">noreferer</a> |
曾经做过一个网站,用xss漏洞扫描器发现了xss漏洞,查看扫描报告,发现是一个ajax数据接口产生的。
该ajax数据接口中存在类似如下的代码:
1 | { |
其中xxx数据是来自ajax提交上来的get参数。由于后端没有过滤非法字符,导致了反射型xss漏洞。
最简单直接的解决方法当然就是过滤特殊字符了,但是过滤并不能保证万无一失。
其实还有更靠谱的解决方法:如果在浏览器上直接访问该ajax接口,应该避免以HTML的方式来呈现返回结果。
这就得设置一个正确的content-type了。
该接口原本设置的content-type为text/javascript
,但这种content-type在firefox、chrome下还是会解析数据中的HTML代码。
其实,正确的content-type应该为application/json
。
不过就算这么设置,在IE下还是有可能会造成xss。
如果我们直接增加一个URL参数为a.html,IE会很奇葩地认为这是一个HTML文件而忽略content-type,使用HTML来解析文件,比如这样:
1 | foo.cgi?id=123&a.html |
HTML编码字符分为两种表达形式:
&#xx;
,xx为十进制数值>
等字符这些字符在不同的上下文中具有不同的表现形式。
1 | <script type="text/javascript"> |
这种上下文中,HTML编码字符会自动解码!上述样例1、样例2的执行结果是一样的。
要想避免自动解码问题,可以使用类似样例3的方法。
假设父页面localhost:8084/1.html用iframe嵌入了localhost:8085/2.html:
1 | <iframe src="http://localhost:8085/2.html"></iframe> |
2.html页面内容如下:
1 | <script> |
访问1.html时,页面会直接跳走到百度首页。
由此可见,跨域的子页面是可以修改父页面的location,但是却不能读取父页面的location,跨域读取的时候,会直接抛DOMException。
查了一下相关文档,location作为一种资源,跨域的时候可以修改但不能读取!
RT,不小心将不显示xcode欢迎界面给勾选了,结果每次打开xcode都看不到界面,还以为没有启动成功。
在Dock上点一下xcode图标,让xcode窗口获得瞧点。然后command+shift+1
就可以重新显示了!
按照apple developer官网所说的,用户的开机自启动任务一般都需要在以下目录建立一个plist文件:
这次我们在/Library/LaunchDaemons
下新建一个nginx.plist
文件:
1 | <?xml version="1.0" encoding="UTF-8"?> |
然后加载:
1 | launchctl load /Library/LaunchDaemons/nginx.plist |
这样就大功告成了!
同理,php-fpm的开机启动也可以这么做!
参考文档:
如果还未commit,想恢复到remote repo上的最新文件,则可以这么干:
1 | git checkout -- 文件路径 |
这样就会覆盖掉本地修改!