查看内存的情况(此时swap行为0)
free -m

初始时Swap 相关数据都是0。

  1. 创建swap文件(本文创建了2G),并使之生效
    a.创建用于交换分区的文件:
    dd if=/dev/zero of=/swapfile bs=1M count=2048
    注:block_size、number_of_block 大小可以自定义,比如 bs=1M count=1024 代表设置 1G 大小 SWAP 分区。
    b.设置交换分区文件:
    mkswap /swapfile

c.立即启用交换分区文件:
swapon /swapfile
这个命令可能会提示“swapon: /swapfile: insecure permissions 0644, 0600 suggested.”,意思是建议把swap设置成644或600权限。

  1. 这时运行free -m会发现swap一列已经有数字了,就是上面第一次执行free -m 后的结果。
    注:如果在 /etc/rc.local 中有 swapoff -a 需要修改为 swapon -a
  2. 在 /etc/fstab 中添加如下一行,使之永久生效
    /swapfile swap swap defaults 0 0
  3. 修改 swpapiness 参数
    在 Linux 系统中,可以通过查看 /proc/sys/vm/swappiness 内容的值来确定系统对 SWAP 分区的使用原则。当 swappiness 内容的值为 0 时,表示最大限度地使用物理内存,物理内存使用完毕后,才会使用 SWAP 分区。当 swappiness 内容的值为 100 时,表示积极地使用 SWAP 分区,并且把内存中的数据及时地置换到 SWAP 分区。
    查看修改前为 0,需要在物理内存使用完毕后才会使用 SWAP 分区。
    可以使用下述方法临时修改此参数,假设我们配置为空闲内存少于 10% 时才使用 SWAP 分区:
    echo 10 >/proc/sys/vm/swappiness
    若需要永久修改此配置,在系统重启之后也生效的话,可以修改 /etc/sysctl.conf 文件,并增加以下内容:
    vm.swappiness=10

关闭 SWAP
当系统出现内存不足时,开启 SWAP 可能会因频繁换页操作,导致 IO 性能下降。如果要关闭 SWAP,可以采用如下方法。
1、free -m 查询 SWAP 分区设置:

2、使用命令swapoff 关闭 SWAP,比如:
swapoff /mnt/swap

3、修改 /etc/fstab 文件,删除或注释相关配置,取消 SWAP 的自动挂载:

4、 通过 free -m 确认 SWAP 已经关闭。

5、 swappiness 参数调整:
可以使用下述方法临时修改此参数,这里配置为 0%:
echo 0 >/proc/sys/vm/swappiness
若需要永久修改此配置,在系统重启之后也生效的话,可以修改 /etc/sysctl.conf文件,并增加以下内容:
vm.swappiness=0

Categories: 分享 Tags:

分享几个安全相关的http header头0+

557 views / 2020.11.10 / 1:01 下午

HttpOnly

如果cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie。XSS全称Cross SiteScript,跨站脚本攻击,是Web程序中常见的漏洞,XSS属于被动式且用于客户端的攻击方式,所以容易被忽略其危害性。其原理是攻击者向有XSS漏洞的网站中输入(传入)恶意的HTML代码,当其它用户浏览该网站时,这段HTML代码会自动执行,从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。

设置cookie为HttpOnly方式如下:

cookie.setHttpOnly(true);

X-Frame-Options 

X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame><iframe> 或者 <object> 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。

使用 X-Frame-Options

X-Frame-Options 有三个值:

  • DENY 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
  • SAMEORIGIN 表示该页面可以在相同域名页面的 frame 中展示。
  • ALLOW-FROM uri 表示该页面可以在指定来源的 frame 中展示。

换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。

配置 Apache

配置 Apache 在所有页面上发送 X-Frame-Options 响应头,需要把下面这行添加到 ‘site’ 的配置中:

Header always append X-Frame-Options SAMEORIGIN

配置 nginx

配置 nginx 发送 X-Frame-Options 响应头,把下面这行添加到 ‘http’, ‘server’ 或者 ‘location’ 的配置中:

add_header X-Frame-Options SAMEORIGIN;

配置 IIS

配置 IIS 发送 X-Frame-Options 响应头,添加下面的配置到 Web.config 文件中:

<system.webServer>
  ...

  <httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="SAMEORIGIN" />
    </customHeaders>
  </httpProtocol>

  ...
</system.webServer>

X-XSS-Protection

HTTP X-XSS-Protection 响应头是Internet Explorer,Chrome和Safari的一个功能,当检测到跨站脚本攻击 (XSS)时,浏览器将停止加载页面。虽然这些保护在现代浏览器中基本上是不必要的,当网站实施一个强大的Content-Security-Policy来禁用内联的JavaScript (‘unsafe-inline‘)时, 他们仍然可以为尚不支持 CSP 的旧版浏览器的用户提供保护。

范例

当检测到XSS攻击时阻止页面加载:

X-XSS-Protection: 1;mode=block

PHP

header("X-XSS-Protection: 1; mode=block");

Apache (.htaccess)

<IfModule mod_headers.c>
  Header set X-XSS-Protection "1; mode=block"
</IfModule>



Content Security Policy(CSP)

Content Security Policy(CSP)是一个HTTP的header

作用是允许站点来声明定义对web资源的限制(JavaScript,CSS,表单提交,etc)

加固建议

建议仿照Github的简单CSP策略来制定自己站点的策略

以GitHub最初的CSP策略为例:

CONTENT-SECURITY-POLICY:
  default-src *;
  script-src 'self' assets-cdn.github.com jobs.github.com ssl.google-analytics.com secure.gaug.es;
  style-src 'self' assets-cdn.github.com 'unsafe-inline';
  object-src 'self' assets-cdn.github.com;

或者制定一个更加完善复杂的CSP策略

再举例现在的Github CSP policy:

CONTENT-SECURITY-POLICY:
  default-src 'none';
  base-uri 'self';
  block-all-mixed-content;
  child-src render.githubusercontent.com;
  connect-src 'self' uploads.github.com status.github.com api.github.com www.google-analytics.com wss://live.github.com;
  font-src assets-cdn.github.com;
  form-action 'self' github.com gist.github.com;
  frame-ancestors 'none';
  frame-src render.githubusercontent.com;
  img-src 'self' data: assets-cdn.github.com identicons.github.com www.google-analytics.com collector.githubapp.com *.gravatar.com *.wp.com *.githubusercontent.com;
  media-src 'none';
  object-src assets-cdn.github.com;
  plugin-types application/x-shockwave-flash;
  script-src assets-cdn.github.com;
  style-src 'unsafe-inline' assets-cdn.github.com
Categories: 感悟 Tags:

页面移除script文件后不刷新的解决办法0+

952 views / 2020.07.30 / 1:01 下午

用dom操作script元素,移除后页面并不会因此而改变,原因是浏览器处理script标签使用块加载的方法,一旦解析完成就写入内存中了。

解决办法是获取当前页面的html,用正则处理掉script标签,然后在打开一个新页面去解析这些html。

参考代码如下:

var ohtml=document.getElementsByTagName('html')[0].innerHTML;
var nhtml=ohtml.replace(/]+xx.js.+?<\/script>/,"").replace(/]+yy.+?<\/script>/,""); 
var testwin= open("", "testwin","");
testwin.document.open();
testwin.document.write(nhtml); 
Categories: 感悟 Tags:

抖音视频无水印下载实现-2020年最新1+

122,123 views / 2020.03.11 / 12:12 上午

既然搜到了本文,您自然知道视频没有水印的重要性,那么如何来实现呢,读完本文,您会有透彻的了解。
为了逻辑清晰,便于讲解,本文借助PHP解析视频源地址,然后通过JSBOX将视频下载的手机,当然您也可以完全用JSBOX实现全部逻辑。

废话不多说,直接上代码:

<?php
$url = $_POST['u'];//这个u就是抖音分享单个视频后复制到剪贴板的地址
!preg_match("/^https/i",$url)&&exit("403");//做个简单的post验证
$header = "User-Agent: Mozilla/5.0 (Linux; Android 8.0; Pixel 2 Build/OPD3.170816.012) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.70 Mobile Safari/537.36\r\n";
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>$header
)
);
$context = stream_context_create($opts);
$content = file_get_contents($url, false, $context);
$try_itemId = preg_match('/itemId\: "([0-9]+)"/',$content, $itemId_match);
$try_dytk = preg_match('/dytk\: "([0-9a-z]+)"/',$content, $dytk_match);
if($try_itemId&&$try_dytk!=1) exit("系统分析错误");
$iteamId = $itemId_match[1];
$dytk = $dytk_match[1];
$cmd = file_get_contents("https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids=".$iteamId."&dytk=".$dytk, false, $context);
$j1 = json_decode($cmd,true);
echo ($j1['item_list'][0]['video']['play_addr']['url_list'][0]);

?>

服务端代码完毕。接下来用jsbox获取剪贴板中的抖音分享链接,将链接POST发送到服务端即可。这部分实现比较简单,就不再赘述。

至此,完毕。

抓取股票数据的定时任务怎么写?0+

58,500 views / 2020.02.28 / 12:12 下午

先写个crontab,规律性的执行一个php脚本,比如2分钟一次。脚本中抓取任务执行前加个stockday判断,就可以了。stockday的实现如下:
function stockday(){
$w = date(“w”,time());
if($w==0||$w==6) return false;//周一到周五执行
//开盘时间大家都知道
$checkDayStr = date(‘Y-m-d ‘,time());
$timeBegin1 = strtotime($checkDayStr.”09:20:00″);
$timeEnd1 = strtotime($checkDayStr.”11:30:00″);
$timeBegin2 = strtotime($checkDayStr.”13:00:00″);
$timeEnd2 = strtotime($checkDayStr.”15:02:00″);
$curr_time = time();
if($curr_time >= $timeBegin1 && $curr_time <= $timeEnd1){
return true;
}
if($curr_time >= $timeBegin2 && $curr_time <= $timeEnd2){
return true;
}
return false;
}

Categories: 感悟 Tags: