web安全-xss攻击

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*/?scripts*>/g,'');
	html = html.replace(/javascript:[^'"]*/g,'');
	html = html.replace(/onerrors*=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

原文地址:https://www.cnblogs.com/weizaiyes/p/7722119.html