web安全-xss攻击

时间:2024-01-21 23:00:21

web安全问题

xss攻击

1.html标签

html内容的转义 escapeHtml

str = str.replace(/&/g,'&amp');

str = str.replace(/</g,'&lt');

str = str.replace(/>/g,'&gt');

2.html属性 单双引号 空格

escapeHtmlProperty

str = str.replace(/"/g,'&quto');

str = str.replace(/'/g,'&#39'); //单引号

//str = str.replace(/ /g,'&#32'); //空格 属性不要出现 src=1.jpg 要有引号

3.input富文本

输入的时候进行过滤

<img src=\"abc\" onerror=\"alert(1)\">
var xssFilter = function(html){
if(!html) return ' ';
html = html.replace(/<\s*\/?script\s*>/g,'');
html = html.replace(/javascript:[^'"]*/g,'');
html = html.replace(/onerror\s*=\s*['"]?[^'"]*['"]?/g,'');
}

按白名单保留部分标签和属性 (除了允许的标签和属性 其他不允许)

CSP

内容安全策略

用于指定哪些内容可以被执行

script-src

php防御xss

1.内置函数转义

strip_tags() //去除<>

htmlspecialchars() // < > & ' " 转义

htmlspecialchars($content,ENT_QUTOS)

2.DOM解析白名单

3.第三方库

如github anti-xss

html purifier

<?php
require_once './library/HTMLPurifier.auto.php'; //防止重复引用
if(strtolower($_SERVER['REQUEST_METHOD'])=='post'){
$content = $_POST['content'];
$purifier = new HTMLPurifier();
$content = $purifier->purify($content);
}
?>
<div><?php echo $content;?></div>
<?php
}
?>
<form method="post">
<textarea name="content">hello</textarea>
<button type="submit">confirm</button>
</form>

4.CSP