当前位置:网站首页>XSS prevention
XSS prevention
2022-07-02 03:52:00 【Doc_ ACwhite】
TP6 Packaging usage steps :
① Use composer Carry out orders , install ezyang/htmlpurifier Extended class library
Under project directory
composer require ezyang/htmlpurifier
② stay app/common.php In the definition of remove_xss function
if (!function_exists('remove_xss')) {
// Use htmlpurifier To guard against xss attack
function remove_xss($string){
// relative index.php Entrance file , introduce HTMLPurifier.auto.php Core documents
//require_once './plugins/htmlpurifier/HTMLPurifier.auto.php';
// Generate configuration object
$cfg = HTMLPurifier_Config::createDefault();
// Here is the configuration :
$cfg -> set('Core.Encoding', 'UTF-8');
// Set the allowed HTML label
$cfg -> set('HTML.Allowed','div,b,strong,i,em,a[href|title],ul,ol,li,br,p[style],span[style],img[width|height|alt|src]');
// Set the allowed CSS Style attribute
$cfg -> set('CSS.AllowedProperties', 'font,font-size,font-weight,font-style,font-family,text-decoration,padding-left,color,background-color,text-align');
// Set up a Is it allowed to use... On the label target="_blank"
$cfg -> set('HTML.TargetBlank', TRUE);
// Use configuration to generate objects for filtering
$obj = new HTMLPurifier($cfg);
// Filter strings
return $obj -> purify($string);
}
}
explain :htmlpurifier plug-in unit , It will filter out script The label and what the label contains js Code .
Middleware processes data
class Safe
{
/**
* Processing requests
*
* @param \think\Request $request
* @param \Closure $next
* @return Response
*/
public function handle($request, \Closure $next)
{
try {
//
# verification token 、 It can be added directly after the route
# Verification timestamp
$this->checkTime();
# Verify the signature
$this->checkSign();
return $next($request);
}catch (Exception $exception) {
return json($exception->getMessage());
}
}
/**
* Verification timestamp
* @throws Exception
*/
public function checkTime(){
$client_time = request()->get('timestamp') ?: request()->post('timestamp');
if (!is_numeric($client_time)) {
throw new Exception(' Incorrect timestamp format ');
}
if (time() - $client_time > 120) {
throw new Exception(' request timeout ');
}
}
/**
* Check the signature
*/
public function checkSign(){
$client_sign = request()->get('sign') ?: request()->post('sign');
# Determine whether there is a signature
if (!$client_sign) {
throw new Exception(' Incorrect signature ');
}
# Determine if the signature is correct
$server_sign = $this->getSign();
if ($client_sign != $server_sign) {
throw new Exception(' Incorrect signature ');
}
}
/**
* Get server signature
* @return string
*/
public function getSign(){
# Get the parameters of all requests
$params = request()->all();
# Signature rules
# First step The parameters participating in the signature do not include the signature itself 、 barring token
unset($params['sign']);
unset($params['token']);
# The second step according to ASCII Sort
ksort($params);
$wait_sign = '';
foreach ($params as $key=> $value) {
$wait_sign .= $key.'='.$value.'&';
}
# Remove the superfluous & Symbol
$wait_sign = rtrim($wait_sign,'&');
return md5($wait_sign);
}
}
Front end generation sign
<script src="../javaScript-MD5/js/md5.js"></script>
<script>
// # Get the parameters of all requests
// # Signature rules
// # First step The parameters participating in the signature do not include the signature itself 、 barring token
// # The second step according to ASCII Sort
// # Remove the superfluous & Symbol
var params = new Array();
params['id'] = 1;
params['name'] = ' Zhang San ';
var sign = createSign(params);
params['sign'] = sign;
var url = 'http://pyg.com/list?'
for (var i in params) {
url += i + '=' + params[i] + '&';
}
$.ajax({
url:url,
dataType:'json',
success:function (result) {
console.log(result);
}
})
function createSign(params) {
var timestamp = Math.ceil((new Date()).getTime()/1000);
params['timestamp'] = timestamp;
params.sort();
var wait_sign = ''
for (var i in params) {
wait_sign += i + '=' + params[i] + '&';
}
wait_sign = wait_sign.substr(0,wait_sign.length-1);
console.log(wait_sign)
sign = hex_md5(wait_sign)
return sign;
}
</script>The second kind : Encapsulate global filtering method
Set the global filtering method to htmlspecialchars
[ This method will make the payment function of the initial version unusable ]
By default, the framework does not set any global filtering rules , You can app\Request Object filter Global filter properties :
namespace app;
class Request extends \think\Request
{
protected $filter = ['htmlspecialchars'];
}边栏推荐
- Get started with Aurora 8b/10b IP core in one day (5) -- learn from the official routine of framing interface
- C语言:逻辑运算和判断选择结构例题
- 集成底座方案演示说明
- 【DesignMode】建造者模式(Builder model)
- Jetpack's livedata extension mediatorlivedata
- 5g era is coming in an all-round way, talking about the past and present life of mobile communication
- The fourth provincial competition of Bluebridge cup single chip microcomputer
- Vite: scaffold assembly
- "Analysis of 43 cases of MATLAB neural network": Chapter 42 parallel operation and neural network - parallel neural network operation based on cpu/gpu
- The 7th Blue Bridge Cup single chip microcomputer provincial competition
猜你喜欢
![[personnel density detection] matlab simulation of personnel density detection based on morphological processing and GRNN network](/img/11/4a8b52603e6e14a1ed6da1264dee57.png)
[personnel density detection] matlab simulation of personnel density detection based on morphological processing and GRNN network

u本位合约爆仓清算解决方案建议

0 foundation how to learn automated testing? Follow these seven steps step by step and you will succeed
![[personal notes] PHP common functions - custom functions](/img/3d/d50622e3ddb08f654f30063e8226ac.jpg)
[personal notes] PHP common functions - custom functions

微信小程序中 在xwml 中使用外部引入的 js进行判断计算

Sorted out an ECS summer money saving secret, this time @ old users come and take it away

Introduction to Robotics II. Forward kinematics, MDH method

蓝桥杯单片机省赛第八届

Pycharm2021 delete the package warehouse list you added

How to do medium and long-term stocks, and what are the medium and long-term stock trading skills?
随机推荐
蓝桥杯单片机省赛第十二届第二场
Cloud service selection of enterprises: comparative analysis of SaaS, PAAS and IAAs
Blue Bridge Cup single chip microcomputer sixth temperature recorder
[yolo3d]: real time detection of end-to-end 3D point cloud input
MySQL之账号管理
Oracle viewing locked tables and unlocking
Suggestions on settlement solution of u standard contract position explosion
u本位合约爆仓清算解决方案建议
Xlwings drawing
The second game of the 11th provincial single chip microcomputer competition of the Blue Bridge Cup
In depth analysis of C language - variable error prone knowledge points # dry goods inventory #
蓝桥杯单片机省赛第十二届第一场
The first game of the 12th Blue Bridge Cup single chip microcomputer provincial competition
蓝桥杯单片机省赛第九届
0基础如何学习自动化测试?按照这7步一步一步来学习就成功了
Haute performance et faible puissance Cortex - A53 Core Board | i.mx8m mini
【DesignMode】建造者模式(Builder model)
跳出舒适区,5年点工转型自动化测试工程师,我只用了3个月时间
初识string+简单用法(二)
JS generate random numbers