一、网安学习成长路线图
网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、网安视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
三、精品网安学习书籍
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、网络安全源码合集+工具包
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、网络安全面试题
最后就是大家最关心的网络安全面试题板块
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
wechartAddOrder( s e t b o d y , set_body, setbody,out_trade_no, p r i c e , price, price,openid, t i m e S t a m p , timeStamp, timeStamp,noncestr);
//微信支付签名
function getSign(
d
a
t
a
=
a
r
r
a
y
(
)
,
data=array(),
data=array(),url,
r
a
n
d
s
t
r
,
randstr,
randstr,time){
KaTeX parse error: Undefined control sequence: \n at position 15: str = "POST"."\̲n̲".url.“\n”.KaTeX parse error: Undefined control sequence: \n at position 7: time."\̲n̲".randstr.“\n”.$data.“\n”;
$key = file_get_contents(‘apiclient_key.pem’);//在商户平台下载的秘钥
s
t
r
=
g
e
t
S
h
a
256
W
i
t
h
R
S
A
(
str = getSha256WithRSA(
str=getSha256WithRSA(str,$key);
return $str;
}
//调起支付的签名
function getWechartSign(
a
p
p
i
d
,
appid,
appid,timeStamp,
n
o
n
c
e
s
t
r
,
noncestr,
noncestr,prepay_id){
$str = KaTeX parse error: Undefined control sequence: \n at position 8: appid."\̲n̲".timeStamp.“\n”.KaTeX parse error: Undefined control sequence: \n at position 11: noncestr."\̲n̲".prepay_id.“\n”;
$key = file_get_contents(‘apiclient_key.pem’);
s
t
r
=
g
e
t
S
h
a
256
W
i
t
h
R
S
A
(
str = getSha256WithRSA(
str=getSha256WithRSA(str,$key);
return $str;
}
function getSha256WithRSA($content, $privateKey){
$binary_signature = “”;
a
l
g
o
=
"
S
H
A
256
"
;
o
p
e
n
s
s
l
s
i
g
n
(
algo = "SHA256"; openssl_sign(
algo="SHA256";opensslsign(content, $binary_signature, $privateKey, $algo);
s
i
g
n
=
b
a
s
e
6
4
e
n
c
o
d
e
(
sign = base64_encode(
sign=base64encode(binary_signature);
return $sign;
}
/* PHP CURL HTTPS POST */
function curl_post_https(
u
r
l
,
url,
url,data,$header){ // 模拟提交数据函数
c
u
r
l
=
c
u
r
l
i
n
i
t
(
)
;
/
/
启动一个
C
U
R
L
会话
c
u
r
l
s
e
t
o
p
t
(
curl = curl_init(); // 启动一个CURL会话 curl_setopt(
curl=curlinit();//启动一个CURL会话curlsetopt(curl, CURLOPT_URL,
u
r
l
)
;
/
/
要访问的地址
c
u
r
l
s
e
t
o
p
t
(
url); // 要访问的地址 curl_setopt(
url);//要访问的地址curlsetopt(curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt(
c
u
r
l
,
C
U
R
L
O
P
T
S
S
L
V
E
R
I
F
Y
H
O
S
T
,
1
)
;
/
/
从证书中检查
S
S
L
加密算法是否存在
c
u
r
l
s
e
t
o
p
t
(
curl, CURLOPT_SSL_VERIFYHOST, 1); // 从证书中检查SSL加密算法是否存在 curl_setopt(
curl,CURLOPTSSLVERIFYHOST,1);//从证书中检查SSL加密算法是否存在curlsetopt(curl, CURLOPT_USERAGENT,
S
E
R
V
E
R
[
′
H
T
T
P
U
S
E
R
A
G
E
N
T
′
]
)
;
/
/
模拟用户使用的浏览器
c
u
r
l
s
e
t
o
p
t
(
_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器 curl_setopt(
SERVER[′HTTPUSERAGENT′]);//模拟用户使用的浏览器curlsetopt(curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt(
c
u
r
l
,
C
U
R
L
O
P
T
A
U
T
O
R
E
F
E
R
E
R
,
1
)
;
/
/
自动设置
R
e
f
e
r
e
r
c
u
r
l
s
e
t
o
p
t
(
curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer curl_setopt(
curl,CURLOPTAUTOREFERER,1);//自动设置Referercurlsetopt(curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS,
d
a
t
a
)
;
/
/
P
o
s
t
提交的数据包
c
u
r
l
s
e
t
o
p
t
(
data); // Post提交的数据包 curl_setopt(
data);//Post提交的数据包curlsetopt(curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
curl_setopt(
c
u
r
l
,
C
U
R
L
O
P
T
H
E
A
D
E
R
,
0
)
;
/
/
显示返回的
H
e
a
d
e
r
区域内容
c
u
r
l
s
e
t
o
p
t
(
curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容 curl_setopt(
curl,CURLOPTHEADER,0);//显示返回的Header区域内容curlsetopt(curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
$tmpInfo = curl_exec($curl); // 执行操作
if (curl_errno($curl)) {
echo 'Errno'.curl_error($curl);//捕抓异常
}
curl_close($curl); // 关闭CURL会话
return $tmpInfo; // 返回数据,json格式
}
## 查询订单是否支付完成
header(‘Content-type:text/html; Charset=utf-8’);
ini_set(‘date.timezone’,‘Asia/Shanghai’);
$data_s = file_get_contents(‘php://input’);
d
a
t
a
s
=
j
s
o
n
d
e
c
o
d
e
(
data_s = json_decode(
datas=jsondecode(data_s,true);
if(empty($data_s[‘out_trade_no’])){
exit;
}
$out_trade_no = $data_s[‘out_trade_no’];//订单号
$merchant_id = ‘商户ID’;//商户ID
$mch_private_key = file_get_contents(‘apiclient_key.pem’);//在商户平台下载的秘钥
$xlid = ‘微信支付公钥序列号’;//秘钥序列号 可在这个网址中查询 https://myssl.com/cert_decode.html
u
r
l
=
′
h
t
t
p
s
:
/
/
a
p
i
.
m
c
h
.
w
e
i
x
i
n
.
q
q
.
c
o
m
/
v
3
/
p
a
y
/
t
r
a
n
s
a
c
t
i
o
n
s
/
o
u
t
−
t
r
a
d
e
−
n
o
/
′
.
url = 'https://api.mch.weixin.qq.com/v3/pay/transactions/out-trade-no/'.
url=′https://api.mch.weixin.qq.com/v3/pay/transactions/out−trade−no/′.out_trade_no.‘?mchid=’.$merchant_id;
u
r
l
p
a
r
t
s
=
p
a
r
s
e
u
r
l
(
url_parts = parse_url(
urlparts=parseurl(url);
$http_method = ‘GET’;
$timestamp = time();
n
o
n
c
e
=
m
d
5
(
t
i
m
e
(
)
.
nonce = md5(time().
nonce=md5(time().out_trade_no);
$body = ‘’;
c
a
n
o
n
i
c
a
l
u
r
l
=
(
canonical_url = (
canonicalurl=(url_parts[‘path’] . (!empty(
u
r
l
p
a
r
t
s
[
′
q
u
e
r
y
′
]
)
?
"
?
url_parts['query']) ? "?
urlparts[′query′])?"?{url_parts[‘query’]}" : “”));
$message = $http_method.“\n”.
$canonical_url.“\n”.
$timestamp.“\n”.
$nonce.“\n”.
KaTeX parse error: Undefined control sequence: \n at position 7: body."\̲n̲"; openssl_sign…message, $raw_sign, $mch_private_key, ‘sha256WithRSAEncryption’);
s
i
g
n
=
b
a
s
e
6
4
e
n
c
o
d
e
(
sign = base64_encode(
sign=base64encode(raw_sign);
$schema = ‘WECHATPAY2-SHA256-RSA2048’;
t
o
k
e
n
=
s
p
r
i
n
t
f
(
′
m
c
h
i
d
=
"
token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"',
token=sprintf(′mchid="merchant_id, $nonce, $timestamp, $xlid, $sign);
h
e
a
d
e
r
=
a
r
r
a
y
(
′
C
o
n
t
e
n
t
−
T
y
p
e
:
′
.
′
a
p
p
l
i
c
a
t
i
o
n
/
j
s
o
n
;
c
h
a
r
s
e
t
=
U
T
F
−
8
′
,
′
A
c
c
e
p
t
:
a
p
p
l
i
c
a
t
i
o
n
/
j
s
o
n
′
,
′
U
s
e
r
−
A
g
e
n
t
:
∗
/
∗
′
,
′
A
u
t
h
o
r
i
z
a
t
i
o
n
:
W
E
C
H
A
T
P
A
Y
2
−
S
H
A
256
−
R
S
A
204
8
′
.
header = array( 'Content-Type:'.'application/json; charset=UTF-8', 'Accept:application/json', 'User-Agent:*/*', 'Authorization: WECHATPAY2-SHA256-RSA2048 '.
header=array(′Content−Type:′.′application/json;charset=UTF−8′,′Accept:application/json′,′User−Agent:∗/∗′,′Authorization:WECHATPAY2−SHA256−RSA2048′.token
);
r
e
t
=
c
u
r
l
g
e
t
h
t
t
p
s
(
ret = curl_get_https(
ret=curlgethttps(url,
d
a
t
a
,
data,
data,header);
r
e
t
u
r
n
o
u
t
t
r
a
d
e
n
o
=
g
e
t
b
e
t
w
e
e
n
(
return_out_trade_no = get_between(
returnouttradeno=getbetween(ret,‘“out_trade_no”:"’,‘",“payer”’);
r
e
t
u
r
n
t
r
a
d
e
s
t
a
t
e
=
g
e
t
b
e
t
w
e
e
n
(
return_trade_state = get_between(
returntradestate=getbetween(ret,‘trade_state":"’,‘",“trade_state_desc”’);
a r r = a r r a y ( ′ t y p e ′ = > ′ s u c c e s s ′ , ′ t r a d e s t a t e ′ = > arr = array('type'=>'success','trade_state'=> arr=array(′type′=>′success′,′tradestate′=>return_trade_state,‘out_trade_no’=> r e t u r n o u t t r a d e n o ) ; e x i t ( j s o n e n c o d e ( return_out_trade_no); exit(json_encode( returnouttradeno);exit(jsonencode(arr));
/*
- php截取指定两个字符之间字符串
- /
function get_between($input, $start, $end) {
s u b s t r = s u b s t r ( substr = substr( substr=substr(input, strlen( s t a r t ) + s t r p o s ( start)+strpos( start)+strpos(input, s t a r t ) , ( s t r l e n ( start),(strlen( start),(strlen(input) - strpos($input, $end))(-1));
return $substr;
}
/* PHP CURL HTTPS GET */
function curl_get_https(
u
r
l
,
url,
url,data,$header){ // 模拟提交数据函数
c
u
r
l
=
c
u
r
l
i
n
i
t
(
)
;
/
/
启动一个
C
U
R
L
会话
c
u
r
l
s
e
t
o
p
t
(
curl = curl_init(); // 启动一个CURL会话 curl_setopt(
curl=curlinit();//启动一个CURL会话curlsetopt(curl, CURLOPT_URL, $url); // 要访问的地址
给大家的福利
零基础入门
对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。
同时每个成长路线对应的板块都有配套的视频提供:
因篇幅有限,仅展示部分资料
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!