本文由腾讯WeTest团队提供,更多资讯可直接戳链接查看:http://wetest.qq.com/lab/
微信号:TencentWeTest
对于新接触web开发的同学来说,XSS注入是一件非常头疼的事情。就算是web开发多年的老手,也不敢保证自己写的代码完全没有XSS注入的风险。
因为现在比较主流的XSS防治手段主要有两种,一种是在用户输入是将异常关键词过滤,另一种则是在页面渲染时将html内容实体化转义。
2024年07月30日
本文由腾讯WeTest团队提供,更多资讯可直接戳链接查看:http://wetest.qq.com/lab/
微信号:TencentWeTest
对于新接触web开发的同学来说,XSS注入是一件非常头疼的事情。就算是web开发多年的老手,也不敢保证自己写的代码完全没有XSS注入的风险。
因为现在比较主流的XSS防治手段主要有两种,一种是在用户输入是将异常关键词过滤,另一种则是在页面渲染时将html内容实体化转义。
2024年07月30日
原创: p0desta 合天智汇
虽然自己也水了些CVE,但是并没有自己满意的、漂亮的漏洞利用链,今天呢主要是自己还没审出过反序列化漏洞,所以找了typecho老版本来审一下。
正文
在install.php第246行会反序列化操作
2024年07月30日
继续分享wordpress建站教程。之前悦然wordpress建站在帮客户做外贸建站时遇到一个需求,他们想在导航栏上显示传统的搜索框,而不是那种弹出式的搜索框,而我使用的那个wordpress主题默认都使用的是弹出式搜索框,现在绝大多数主题应该都是用的这种,一般来说这没什么问题,弹出式的搜索框效果还更好一些。但是用户需求高于一切,能实现肯定要尽量去实现的。
2024年07月30日
HTML
return [ '<a href = "#" onClick = "trk_detail(\'' + q_mth + '\',\'' + q_slic + '\',\'' + q_type + '\')">' + ttlpcs + '</a>'].join("")
2024年07月30日
关于Laravel的新的Vue服务器端渲染功能的教程。该教程主要集中在Laravel环境中设置SSR,所以我只有时间来演示一个简单的“Hello World”应用程序,没有显着的功能。
现在我想要构建上一个教程,并演示如何使用Vue Router呈现包含多个页面的Vue应用程序,因为大多数Laravel项目都有多个页面。
2024年07月30日
/** * PHP将网页上的图片攫取到本地存储 * @param $imgUrl 图片url地址 * @param string $saveDir 本地存储路径 默认存储在当前路径 * @param null $fileName 图片存储到本地的文件名 * @return mix */ function crabImage($imgUrl, $saveDir='./', $fileName=null){ if(empty($imgUrl)){ return false; } //获取图片信息大小 $imgSize = getImageSize($imgUrl); if(!in_array($imgSize['mime'],array('image/jpg', 'image/gif', 'image/png', 'image/jpeg'),true)){ return false; } //获取后缀名 $_mime = explode('/', $imgSize['mime']); $_ext = '.'.end($_mime); if(empty($fileName)){ //生成唯一的文件名 $fileName = uniqid(time(),true).$_ext; } //开始攫取 ob_start(); //读入一个文件,并写入到输出缓冲 readfile($imgUrl); //从缓冲中读取内容 $imgInfo = ob_get_contents(); //清除缓冲内容 ob_end_clean(); if(!file_exists($saveDir)){ mkdir($saveDir,0777,true); } $fp = fopen($saveDir.$fileName, 'a'); $imgLen = strlen($imgInfo); //计算图片源码大小 $_inx = 1024; //每次写入1k $_time = ceil($imgLen/$_inx); for($i=0; $i<$_time; $i++){ fwrite($fp,substr($imgInfo, $i*$_inx, $_inx)); } fclose($fp); return array('file_name'=>$fileName, 'save_path'=>$saveDir.$fileName); } //$url = 'https://www.baidu.com/img/baidu_jgylogo3.gif'; //$url = 'http://www.phpernote.com/images/logo.gif'; $url = 'http://avatar.csdn.net/5/3/6/1_u014236259.jpg'; var_dump( crabImage($url) );
2024年07月30日
在上一节中,我们修改好了wordpress主题trans的首页的状况。本节,我们再来介绍如何修改trans主题首页模板的左侧主体代码。trans主题首页左侧主要展现的是最新文章列表以及分页(如下图)。
?目前,这个首页的内容还是死的,是一个静态的文件,wordpress后台发表新的文章,这里也不会发生变化。我们需要实现的是:在我们发表文章后,这里就要发生相应的变化——我们新发表的文章会展示在这个列表中。还有,我们要实现点击分页按钮时,也能跳到对应的页面。下面,我们就来一步一步地操作。
2024年07月30日
我们在使用PHP开发后台时,经常会用到数据统计导出的功能,这个功能要怎么去实现呢?今天,就让小编带领大家去完成这个功能吧。PHPExcel插件可以在网上下载,这里不做过多陈述。
我们先来看一下效果:
设置文件编码为utf8
header("Content-type: text/html; charset=utf-8");
2024年07月30日
<?php
namespace app\service;
class PosterService{
public static function create($config = [], $filename = ''){
$imageDefault = array(
'url'=>'图片路径'
'left' => 0,
'top' => 0,
'width' => 100,
'height' => 100,
'opacity' => 100,
'circle' => 0
);
$qrcodeDefault = [
'text' => '二维码内存',
'size' => 100,
'margin' => 2,
'left' => 0,
'top' => 0,
'color' => '0,0,0',
'callback' => function(){}
];
$textDefault = array(
'text' => '文字内存',
'left' => 0,
'top' => 0,
'align' => '',//center
'font-size' => 32,//字号
'color' => '0,0,0', //字体颜色
'angle' => 0,
'font-path' => '' //字体路径
);
$background = $config['background'];//海报最底层得背景
//背景方法
$backgroundInfo = getimagesize($background);
$backgroundFun = 'imagecreatefrom'.image_type_to_extension($backgroundInfo[2], false);
$background = $backgroundFun($background);
$backgroundWidth = imagesx($background); //背景宽度
$backgroundHeight = imagesy($background); //背景高度
$imageRes = imageCreatetruecolor($backgroundWidth,$backgroundHeight);
$color = imagecolorallocate($imageRes, 0, 0, 0);
imagefill($imageRes, 0, 0, $color);
//imageColorTransparent($imageRes, $color); //颜色透明
imagecopyresampled($imageRes,$background,0,0,0,0,imagesx($background),imagesy($background),imagesx($background),imagesy($background));
if (!empty($config['qrcode'])){
foreach ($config['qrcode'] as $item){
$item = array_merge($qrcodeDefault, $item);
list($r,$b,$g) = explode(',', $item['color']);
$item['color'] = ['r' => $r, 'g' => $b, 'b' => $g];
$baseImage = imagecreatefromstring($item['callback']($item));
$resWidth = $resHeight = min(imagesx($baseImage), imagesy($baseImage));;
//建立画板 ,缩放图片至指定尺寸
$canvas = imagecreatetruecolor($item['size'], $item['size']);
// 码的背景颜色
$color = imagecolorallocate($canvas, 255, 255, 255);
// 设置透明背景
imagecolortransparent($canvas, $color);
imagefill($canvas,0,0,$color);
//关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h)
imagecopyresampled($canvas, $baseImage, 0, 0, 0, 0, $item['size'], $item['size'],$resWidth, $resHeight);
imagecopymerge($imageRes, $canvas, $item['left'],$item['top'],0,0, $item['size'], $item['size'],100);
}
}
//处理了图片
if(!empty($config['image'])){
foreach ($config['image'] as $key => $val) {
$val = array_merge($imageDefault,$val);
$info = getimagesize($val['url']);
if($val['circle']){ //如果传的是字符串图像流
$canvas = self::imageRadius($val['url'], $val['width']/2);
}else{
$function = 'imagecreatefrom'.image_type_to_extension($info[2], false);
$res = $function($val['url']);
$resWidth = $info[0];
$resHeight = $info[1];
//建立画板 ,缩放图片至指定尺寸
$canvas=imagecreatetruecolor($val['width'], $val['height']);
imagefill($canvas, 0, 0, $color);
//关键函数,参数(目标资源,源,目标资源的开始坐标x,y, 源资源的开始坐标x,y,目标资源的宽高w,h,源资源的宽高w,h)
imagecopyresampled($canvas, $res, 0, 0, 0, 0, $val['width'], $val['height'],$resWidth,$resHeight);
}
$val['left'] = $val['left']<0?$backgroundWidth- abs($val['left']) - $val['width']:$val['left'];
$val['top'] = $val['top']<0?$backgroundHeight- abs($val['top']) - $val['height']:$val['top'];
//放置图像
imagecopymerge($imageRes,$canvas, $val['left'], $val['top'], 0, 0, $val['width'], $val['height'],$val['opacity']);//左,上,右,下,宽度,高度,透明度
imagedestroy($canvas);
}
}
//处理文字
if(!empty($config['text'])){
foreach ($config['text'] as $key => $val) {
$val = array_merge($textDefault,$val);
list($R,$G,$B) = explode(',', $val['color']);
$color = imagecolorallocate($imageRes, $R, $G, $B);
$arr = imagettfbbox($val['font-size'],0,$val['font-path'],$val['text']);
$text_height = $arr[3] - $arr[5];
if ($val['align'] == 'center'){
$text_width = $arr[2]-$arr[0];
$val['left'] = ($backgroundWidth - $text_width)/2;
}else{
$val['left'] = $val['left'] < 0 ? $backgroundWidth- abs($val['left']):$val['left'];
}
$val['top'] = $val['top'] < 0 ? $backgroundHeight- abs($val['top']) : $val['top'];
$val['top'] += $text_height;
imagettftext($imageRes,$val['font-size'],$val['angle'],$val['left'],$val['top'],$color,$val['font-path'],$val['text']);
}
}
//生成图片
if(!empty($filename)){
if ($filename == 'base64'){
ob_start();
imagepng($imageRes);//在浏览器上显示
$string = strval(ob_get_contents());
ob_end_clean();
return 'data:image/png;base64,'.base64_encode($string);
}
$res = imagepng($imageRes, RUNTIME_PATH.'/'. $filename,90); //保存到本地
imagedestroy($imageRes);
if(!$res) return false;
return $filename;
}else{
ob_start();
imagepng($imageRes);//在浏览器上显示
$string = strval(ob_get_contents());
ob_end_clean();
return $string;
}
}
/**
* 生成圆形
* @param $image 图片地址
* @param null $radius 半径
* @return false|\GdImage|resource
*/
public static function imageRadius($image, $radius = null){
/**
* 处理圆形图
* @param $image 图片地址
* @return string
*/
$logo = imagecreatefromstring(file_get_contents($image));//源图象连接资源。
$height = $width = min(imagesx($logo), imagesy($logo));
if ($radius && $width / 2 < $radius){
$new_w = $new_h = $radius * 2;
$new = imagecreatetruecolor($new_w, $new_h);
imagecopyresized($new, $logo,0, 0,0, 0, $new_w, $new_h, $width, $height);
$width = $height = $new_w;
$logo = $new;
}
//创建一个和二维码图片一样大小的真彩色画布
$canvas = imagecreatetruecolor($width, $height);
$color = imagecolorallocatealpha($canvas, 0, 0, 0, 127);
imagesavealpha($canvas, true);
imagealphablending($canvas, false);
imagefill($canvas, 0, 0, $color);
imageColorTransparent($canvas, $color);
$r = $width / 2; //半径
for ($x = 0; $x < $width; $x++) {
for ($y = 0; $y < $height; $y++) {
$rgb_color = imagecolorat($logo, $x, $y);
if (((($x - $r) * ($x - $r) + ($y - $r) * ($y - $r) < ($r * $r)))) {
imagesetpixel($canvas, $x, $y, $rgb_color);
}
}
}
imagedestroy($logo);
/*ob_start();
imagepng($canvas);//在浏览器上显示
$string = strval(ob_get_contents());
ob_end_clean();
file_put_contents(RUNTIME_PATH.'/avatar.png',$string);*/
return $canvas;
}
}