分类目录归档:安全

去除http头部的Referer信息,防止重要网址被浏览器“偷偷的泄漏”

有时候我们需要在点击链接时候去除http头部的referer属性,
比如在网站后台有链接到外部网站的地方,若不去除的话
很容易暴漏我们的后台地址
浏览器 我只测试了IE8以及chrome33

通常下面的一些方式,$_SERVER[‘HTTP_REFERER’] 会无效:
1.直接输入网址访问该网页。
–!肯定不能让用户复制链接然后在粘贴打开吧

2.Javascript 打开的网址。

<a href="javascript:void(0)" onclick="window.open('/test/index.php?a');">window.open()</a>

IE8没有问题,但是chrome还是携带referer

3.Javascript 重定向(window.location)网址。

<a href="javascript:void(0)" onclick="location='/test/index.php?a'">location</a><br/>

 

表现与使用open()一样
看样子chrome只要js代码在a标签的点击事件中就会携带referer信息

4.使用html5中noreferrer

<a href="/test/index.php?noreferer" rel="noreferrer" target="_blank">noreferrer</a>

很明显IE8以及以下肯定是不支持的
chrome正常点击的话没问题,但是假如是右击链接然后重新窗口或标签打开,同样会传递referer
操作性:4 稳定性:3 兼容性:3

5.使用 meta refresh 重定向的网址。
这个会多出来个跳转页面,
IE8支持,chrome同样携带referer
6.flash打开 中的链接。

7.浏览器未加设置或被用户修改。
有些浏览器可以修改在https网址中是否传递referer信息,但是我没在浏览器中找到这个选项
或者是安装插件referer信息进行屏蔽

最方便可靠的方法还是使用flash,你不能要求所有人都是用最新的浏览器,并且不是右击新窗口打开,或者安装个插件什么的

用flash想到有两种实现方式
1.使用flash按钮替换a标签 然后把链接当作参数传递给flash程序
假如链接是动态的需要计算处理话,可以通过flash调用js函数,然后由这个js函数返回链接地址
2.还有就是js调用flash中的方法
这种最方便了,对原有代码改动最小。
但是弄了几次在chrome总是调用失败,改天在研究下吧

下面是第一种实现方式的示例代码

<!--flash引用代码-->
<object id="open_url" width="25" height="20" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" >
    <param name="movie" value="js/fla_open_url.swf?callback=get_url" />
    <param name="quality" value="high" />
    <param name="wmode" value="transparent" />
    <embed width="25" height="20"  src="js/fla_open_url.swf?callback=get_url" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" wmode="transparent"/>
</object>
<script type="text/javascript">
    function get_url(){
        return 'http://www.baidu.com';
    }

</script>

新建个flash,添加个button 在动作中粘贴如下代码

    on (release) { 
        import flash.external.ExternalInterface;
        loadVariablesNum('','callback');//获取js回调函数名称,存放在callback变量中

        if(callback!=''){
            open_url=ExternalInterface.call(callback);//调用js程序,获取url

            if(open_url!=undefined){
                getURL(open_url,'_blank');//在新窗口打开链接 
            }

        }
    }

 notice:

利用ExternalInterface.call调用html里的js函数,参照了flash帮助文档里的做法.可以执行js的函数.但就是无法获取return的值.
网上一大堆教程也只是抄flash帮助文档的东西.也试了allowScriptAccess=always.结果无效,
最后我去搜了N次后,答案居然是只要给<object>加上一个id或是name就解决了.

linux 用户通过ssh登录后邮件提醒

我一般没事的话,不长登录服务器,长时间没有登录的话,就会担心服务器会不会被入侵了,没安全感啊!–

所以写了一个脚本,只要有用户通过ssh登录到服务器上,自动把ip地址所在地图时间发送到特定邮箱中

所需软件

1.nali 获取ip的所在地区

wget --no-check-certificate  https://qqwry.googlecode.com/files/nali-0.2.tar.gz
tar zxvf nali-0.2.tar.gz 
cd nali-0.2/
./configure 
make
make install

2. mutt 以及 msmtp

Ubuntu 下使用 mutt 和 msmtp 发送 Gmail 邮件

配置成功了,发个邮件测试一下

echo "邮件内容"| mutt -s "邮件主体" 接收邮件地址

假如能收到的话,可以进行下一步了

新建一个脚本 放到 /opt下其他目录也行比如 /usr/local/bin/ 只要是在环境变量path中就行了

vi /opt/user_login_notice.sh
#输入下面的内容
#! /bin/sh
echo  login from `nali ${SSH_CLIENT%% *}` at `date +'%H:%M:%S %m/%d'` | mutt -s "[ssh notice]$USER@`hostname` " ksc@qq.com

也可以不通过mutt,直接通过 msmtp发送

#!/bin/sh
content="login from `nali ${SSH_CLIENT%% *}` at `date +'%H:%M:%S %m/%d'`"

head="MIME-Version: 1.0\r\nContent-type: text/html; charset=utf-8\r\n"
head=$head"To: ${to}\r\nFrom: geekli notice \r\nSubject: [ssh notice]$USER@`hostname`\r\n\r\n"

echo $head$content | msmtp -a notice ksc@qq.com
# msmtp -a 指定发送邮件的账户 若设置了默认的 可不填写
#邮件头中要设置 字符编码格式 不然可能会出现乱码的情况
# From:中的 发送地址要跟msmtp中配置的一致
# 希望所有用户都能发送,需要msmtp的全局配置文件 /etc/msmtprc

 

chmod 775 /opt/user_login_notice.sh #添加执行权限
vi /etc/ssh/sshrc #可能会没有这个文件
#然后输入以下内容

#!/bin/sh
/opt/user_login_notice.sh

这样每次登录后会调用邮件发送脚本 我发送接受都是用的QQ邮箱,基本上3秒之内就能收到通知