当前位置:首页 > 黑客接单 > 正文内容

php防范xss(php防范一句话木马)

hacker3年前 (2022-05-29)黑客接单156

本文导读目录:

如何正确防御xss攻击

XSS攻击通常是指黑客通过"HTML注入"篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

一、HttpOnly防止劫取Cookie

HttpOnly最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的Javascript访问带有HttpOnly属性的Cookie。目前主流浏览器都支持,HttpOnly解决是XSS后的Cookie支持攻击。

我们来看下百度有没有使用。

未登录时的Cookie信息

可以看到,所有Cookie都没有设置HttpOnly,现在我登录下

发现在个叫BDUSS的Cookie设置了HttpOnly。可以猜测此Cookie用于认证。

下面我用PHP来实现下:

?php

header("Set-Cookie: cookie1=test1;");

header("Set-Cookie: cookie2=test2;httponly",false);

setcookie('cookie3','test3',NULL,NULL,NULL,NULL,false);

setcookie('cookie4','test4',NULL,NULL,NULL,NULL,true);

script

alert(document.cookie);

/script

js只能读到没有HttpOnly标识的Cookie

二、输入检查

输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如、、'、"等,如果发现存在特殊字符,则将这些字符过滤或者编码。

例如网站注册经常用户名只允许字母和数字的组合,或者邮箱 *** ,我们会在前端用js进行检查,但在服务器端代码必须再次检查一次,因为客户端的检查很容易绕过。

网上有许多开源的“XSS Filter”的实现,但是它们应该选择性的使用,因为它们对特殊字符的过滤可能并非数据的本意。比如一款php的lib_filter类:

$filter = new lib_filter();

echo $filter-go('1+11');

它输出的是1,这大大歪曲了数据的语义,因此什么情况应该对哪些字符进行过滤应该适情况而定。

三、输出检查

大多人都知道输入需要做检查,但却忽略了输出检查。

1、在HTML标签中输出

如代码:

?php

$a = "scriptalert(1);/script";

$b = "img src=# onerror=alert(2) /";

div?=$b?/div

a href="#"?=$a?/a

这样客户端受到xss攻击,解决 *** 就是对变量使用htmlEncode,php中的函数是htmlentities

?php

$a = "scriptalert(1);/script";

$b = "img src=# onerror=alert(2) /";

div?=htmlentities($b)?/div

a href="#"?=htmlentities($a)?/a

2、在HTML属性中输出

div id="div" name ="$var"/div

这种情况防御也是使用htmlEncode

在owasp-php中实现:

$immune_htmlattr = array(',', '.', '-', '_');

$this-htmlEntityCodec-encode($this-immune_htmlattr, "\"script123123;/script\"");

3、在script标签中输出

如代码:

?php

$c = "1;alert(3)";

script type="text/javascript"

var c = ?=$c?;

/script

这样xss又生效了。首先js变量输出一定要在引号内,但是如果我$c = "\"abc;alert(123);//",你会发现放引号中都没用,自带的函数都不能很好的满足。这时只能使用一个更加严格的JavascriptEncode函数来保证安全——除数字、字母外的所有字符,都使用十六进制"\xHH"的方式进行编码。这里我采用开源的owasp-php *** 来实现

$immune = array("");

echo $this-javascriptCodec-encode($immune, "\"abc;alert(123);//");

最后输出\x22abc\x3Balert\x28123\x29\x3B\x2F\x2F

4、在事件中输出

a href="#" onclick="funcA('$var')" test/a

可能攻击 ***

a href="#" onclick="funcA('');alter(/xss/;//')"test/a

这个其实就是写在script中,所以跟3防御相同

5、在css中输出

在owasp-php中实现:

$immune = array("");

$this-cssCodec-encode($immune, 'background:expression(window.x?0:(alert(/XSS/),window.x=1));');

6、在地址中输出

先确保变量是否是"http"开头,然后再使用js的encodeURI或encodeURIComponent *** 。

在owasp-php中实现:

$instance = ESAPI::getEncoder();

$instance-encodeForURL(‘url’);

四、处理富文体

就像我写这篇博客,我几乎可以随意输入任意字符,插入图片,插入代码,还可以设置样式。这个时要做的就是设置好白名单,严格控制标签。能自定义 css件麻烦事,因此更好使用成熟的开源框架来检查。php可以使用htmlpurify

五、防御DOM Based XSS

DOM Based XSS是从javascript中输出数据到HTML页面里。

script

var x = "$var";

document.write("a href='"+x+"'test/a");

/script

按照三中输出检查用到的防御 *** ,在x赋值时进行编码,但是当document.write输出数据到HTML时,浏览器重新渲染了页面,会将x进行解码,因此这么一来,相当于没有编码,而产生xss。

防御 *** :首先,还是应该做输出防御编码的,但后面如果是输出到事件或脚本,则要再做一次javascriptEncode编码,如果是输出到HTML内容或属性,则要做一次HTMLEncode。

会触发DOM Based XSS的地方有很多:

document.write()、document.writeln()、xxx.innerHTML=、xxx.outerHTML=、innerHTML.replace、document.attachEvent()、window.attachEvent()、document.location.replace()、document.location.assign()

如何实现php的安全更大化?怎样避免sql注入漏洞和xss跨站脚本攻击漏洞

使用php安全模式

服务器要做好管理,账号权限是否合理。

假定所有用户的输入都是“恶意”的,防止XSS攻击,譬如:对用户的输入输出做好必要的过滤

防止CSRF,表单设置隐藏域,post一个随机字符串到后台,可以有效防止跨站请求伪造。

文件上传,检查是否做好效验,要注意上传文件存储目录权限。

防御SQL注入。 

避免SQL注入漏洞

1.使用预编译语句

2.使用安全的存储过程

3.检查输入数据的数据类型

4.从数据库自身的角度考虑,应该使用最小权限原则,不可使用root或dbowner的身份连接数据库。若多个应用使用同一个数据库,也应该为数据库分配不同的账户。web应用使用的数据库账户,不应该有创建自定义函数,操作本地文件的权限。

避免XSS跨站脚本攻击

1.假定所有用户输入都是“邪恶”的

2.考虑周全的正则表达式

3.为cookie设置HttpOnly,防止cookie劫持

4.外部js不一定可靠

5.出去不必要的HTML注释

6. 针对非法的HTML代码包括单双引号等,使用htmlspecialchars()函数。

如何防止xss攻击,需要过滤什么

XSS攻击通常是指黑客通过"HTML注入"篡改了网页,插入了恶意的脚本,从而在用户浏览网页时,控制用户浏览器的一种攻击。

一、HttpOnly防止劫取Cookie

HttpOnly最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的Javascript访问带有HttpOnly属性的Cookie。目前主流浏览器都支持,HttpOnly解决是XSS后的Cookie支持攻击。

我们来看下百度有没有使用。

未登录时的Cookie信息

可以看到,所有Cookie都没有设置HttpOnly,现在我登录下

发现在个叫BDUSS的Cookie设置了HttpOnly。可以猜测此Cookie用于认证。

下面我用PHP来实现下:

?php

header("Set-Cookie: cookie1=test1;");

header("Set-Cookie: cookie2=test2;httponly",false);

setcookie('cookie3','test3',NULL,NULL,NULL,NULL,false);

setcookie('cookie4','test4',NULL,NULL,NULL,NULL,true);

script

alert(document.cookie);

/script

js只能读到没有HttpOnly标识的Cookie

二、输入检查

输入检查一般是检查用户输入的数据中是否包含一些特殊字符,如、、'、"等,如果发现存在特殊字符,则将这些字符过滤或者编码。

例如网站注册经常用户名只允许字母和数字的组合,或者邮箱 *** ,我们会在前端用js进行检查,但在服务器端代码必须再次检查一次,因为客户端的检查很容易绕过。

网上有许多开源的“XSS Filter”的实现,但是它们应该选择性的使用,因为它们对特殊字符的过滤可能并非数据的本意。比如一款php的lib_filter类:

$filter = new lib_filter();

echo $filter-go('1+11');

它输出的是1,这大大歪曲了数据的语义,因此什么情况应该对哪些字符进行过滤应该适情况而定。

三、输出检查

大多人都知道输入需要做检查,但却忽略了输出检查。

1、在HTML标签中输出

如代码:

?php

$a = "scriptalert(1);/script";

$b = "img src=# onerror=alert(2) /";

div?=$b?/div

a href="#"?=$a?/a

这样客户端受到xss攻击,解决 *** 就是对变量使用htmlEncode,php中的函数是htmlentities

?php

$a = "scriptalert(1);/script";

$b = "img src=# onerror=alert(2) /";

div?=htmlentities($b)?/div

a href="#"?=htmlentities($a)?/a

2、在HTML属性中输出

div id="div" name ="$var"/div

这种情况防御也是使用htmlEncode

在owasp-php中实现:

$immune_htmlattr = array(',', '.', '-', '_');

$this-htmlEntityCodec-encode($this-immune_htmlattr, "\"script123123;/script\"");

3、在script标签中输出

如代码:

?php

$c = "1;alert(3)";

script type="text/javascript"

var c = ?=$c?;

/script

这样xss又生效了。首先js变量输出一定要在引号内,但是如果我$c = "\"abc;alert(123);//",你会发现放引号中都没用,自带的函数都不能很好的满足。这时只能使用一个更加严格的JavascriptEncode函数来保证安全——除数字、字母外的所有字符,都使用十六进制"\xHH"的方式进行编码。这里我采用开源的owasp-php *** 来实现

$immune = array("");

echo $this-javascriptCodec-encode($immune, "\"abc;alert(123);//");

最后输出\x22abc\x3Balert\x28123\x29\x3B\x2F\x2F

4、在事件中输出

a href="#" onclick="funcA('$var')" test/a

可能攻击 ***

a href="#" onclick="funcA('');alter(/xss/;//')"test/a

这个其实就是写在script中,所以跟3防御相同

5、在css中输出

在owasp-php中实现:

$immune = array("");

$this-cssCodec-encode($immune, 'background:expression(window.x?0:(alert(/XSS/),window.x=1));');

6、在地址中输出

先确保变量是否是"http"开头,然后再使用js的encodeURI或encodeURIComponent *** 。

在owasp-php中实现:

$instance = ESAPI::getEncoder();

$instance-encodeForURL(‘url’);

四、处理富文体

就像我写这篇博客,我几乎可以随意输入任意字符,插入图片,插入代码,还可以设置样式。这个时要做的就是设置好白名单,严格控制标签。能自定义 css件麻烦事,因此更好使用成熟的开源框架来检查。php可以使用htmlpurify

五、防御DOM Based XSS

DOM Based XSS是从javascript中输出数据到HTML页面里。

script

var x = "$var";

document.write("a href='"+x+"'test/a");

/script

按照三中输出检查用到的防御 *** ,在x赋值时进行编码,但是当document.write输出数据到HTML时,浏览器重新渲染了页面,会将x进行解码,因此这么一来,相当于没有编码,而产生xss。

防御 *** :首先,还是应该做输出防御编码的,但后面如果是输出到事件或脚本,则要再做一次javascriptEncode编码,如果是输出到HTML内容或属性,则要做一次HTMLEncode。

会触发DOM Based XSS的地方有很多:

document.write()、document.writeln()、xxx.innerHTML=、xxx.outerHTML=、innerHTML.replace、document.attachEvent()、window.attachEvent()、document.location.replace()、document.location.assign()

php网站怎样防御xss攻击?

过滤用户输入的script/script以及其他的HTML标签等。。

如何有效防止XSS攻击/AJAX跨域攻击

1,利用字符过滤漏洞,提交恶意js代码,当用户打开页面时执行

2,需要填写图片地址或css等直接在页面加载时执行的地方,填写恶意js [javascript:xxxx],当用户打开包含图片的页面时,可以执行js。比如GET s1.game.com/fight/:id 表示发兵到某个用户,虽然做了用户验证,但没做来源验证,用户只需将这个地址发到同用户的论坛作为图片地址即可执行

3,通过跳转页面漏洞,比如 refer.php?message=xxxx ,页面上直接用 $_GET['message'] 的话,就会造成xss漏洞,把message的参数换成js代码或恶意网址,即可盗取用户cookie,或执行恶意js,或跳转到钓鱼页面等

4,利用浏览器或服务器0day漏洞

1,XSS主要是你的页面可以运行用户写的js,所以对所有的用户提交的数据进行过滤,对于判断用户是否登录状态的cookie信息进行加密,并且加上Ip信息,这样基本被盗取也无法获取登录权限

2,对update或delete的操作采用post方式提交,每次form里加一个唯一验证字符串,用hiden方式提交,用于服务器验证是否来自用户客户端

3,跳转程序需要对传递的url进行匹配判断,只允许特定的格式

4,时常关注安全方面的消息,一有漏洞即刻不上

看看我这个PHP代码怎么防止跨站脚本攻击(XSS)

很遗憾,你这代码乱得很,而且看起来是后端处理代码,并不是xss关键处理代码,xss一般在入库前进行转义

如何在php中修补XSS漏洞

你好,如果要修补xss漏洞,通用的一个做法是使用htmlspecialchars()函数。

使用该函数大概可以预防90%左右的xss左右的攻击,避免你的PHP程序受到攻击。

php下怎样防止XSS攻击

在PHP中修补XSS漏洞,我们可以使用三个PHP函数。

这些函数主要用于清除HTML标志,这样就没办法注入代码了。使用更多的函数是htmlspecialchars() ,它可以将所有的""与""符号转换成"" 与"gt;"。其它可供选择的函数还有htmlentities(), 它可以用相应的字符实体(entities)替换掉所有想要替换掉的特征码(characters)。

PHP Code:

// 这里的代码主要用于展示这两个函数之间输出的不同

$input = 'scriptalert(1);/script';

echo htmlspecialchars($input) . 'br /';

echo htmlentities($input);

htmlentities()的另一个例子

PHP Code:

?php

$str = "A 'quote' is bbold/b";

echo htmlentities($str);

echo htmlentities($str, ENT_QUOTES);

之一个显示: A 'quote' is bbold/b

第二个显示:A 'quote' is bbold/b

htmlspecialchars()使用实例

PHP Code:

?php

$new = htmlspecialchars("a href='test'Test/a", ENT_QUOTES);

echo $new;

显示: a href='test'Test/a

strip_tags()函数代替.删除所有的HTML元素(elements),除了需要特别允许的元素之外,如:i, b 或p.

strip_tags()使用实例

PHP Code:

?php

$text = 'pTest paragraph./p!-- Comment -- Other text';

echo strip_tags($text);

echo "\n";

// allow p

echo strip_tags($text, 'p');

现在我们至少已经知道有这些函数了,当我们发现我们的站点存在XSS漏洞时就可以使用这些代码了。我最近在我的站点上的GoogleBig(一个Mybb论坛的插件)视频部分发现了一个XSS漏洞,因此我就在想如何使用这些函数写段代码来修补这个搜索漏洞。

首先我发现问题出在search.php这一文件上,现在让我们看看这个查询及输出查询结果中的部分代码研究一下:

PHP Code:

function search($query, $page)

global $db, $bgcolor2, $bgcolor4, $sitename, $io_db, $module_url, $list_page_items, $hm_index;

$option = trim($option);

$query = trim($query);

$query = FixQuotes(nl2br(filter_text($query)));

$db-escape_string($query);

$db-escape_string($option);

alpha_search($query);

在这种情况下,我们通过使用$query这一值作为变量,然后使用htmlentities()这一函数:

PHP Code:

$query = FixQuotes(nl2br(filter_text(htmlentities($query))));

如果你对这三种函数还有有疑问可以使用PHP手册来查看:

http://it.php.net/htmlentities

http://it2.php.net/htmlspecialchars

http://it2.php.net/strip_tags

扫描二维码推送至手机访问。

版权声明:本文由黑客24小时在线接单网站发布,如需转载请注明出处。

本文链接:https://www.cn-sl.com/109947.html

标签: php防范xss
分享给朋友:

“php防范xss(php防范一句话木马)” 的相关文章

服务器价格 「密情缘1」

是文字疑.那否能是个很没有错的存储办事 。觅缘义务 是 四0情缘,正常的四核电脑「便足够用了,爆米花,点卡的支出,便解释 被修正 了,分为三部门 :机位用度 带严用度 IP数目 依据 您所抉择机房路线战带广大 小的分歧 ,上面便为年夜 野具体 许多 。 公正在搭修正在境中的办事 器,梦幻西游情缘晶币...

朴槿惠获释 粉丝挥应援棒喊我爱你

择要 : 二0 二 一年 一 二月 三 一日(阴历  二0 二 一年 一 一月 二 八日),朴槿惠获释粉丝挥应援棒喊尔爱您。 朴槿惠获释粉丝挥应援棒喊尔爱您。朴槿惠获释刹时 :粉丝挥舞应援棒全喊“尔爱您”,年夜 妈泣如雨下 。 南京空儿 二0 二 一年 一 二月 三 一日,韩国前总统朴槿惠于本地 空...

哪些人员可以报考面向服务基层项目人员定向招录的职位 哪些人员可以报考面向服务基层项目人员定向招录的职位

 二0 二 一地津公事 员测验 通知布告 ( 二 二0 六人)未宣布 !报名空儿: 二0 二 一年 三月 三日 八:00至 三月 九日,口试 空儿为 三月 二 七日、 二 八日。为便利 宽大 考熟相识  二0 二 一地津市考报考相闭答题,外私学育地津频叙特殊 整顿 了相闭内容,如下为 二0 二 ...

香菜的种植方法(香菜的种植方法和步骤)

喷鼻 菜,正在咱们那面鸣芜荽喷鼻 菜的栽种 要领 。果有一种特殊 孬味的喷鼻 气。年夜 野皆鸣它喷鼻 菜。喷鼻 菜是年夜 寡调味菜,无论鸡,鸭,鱼,年夜 肉等菜,作孬时总爱搁一点儿喷鼻 菜,看着美不雅 ,吃着喷鼻 。是饭铺 战野户弗成 短少的调味菜。 正在咱们农村,野野户户都邑 种一小畦喷鼻...

电刷是什么(电刷是什么东西)

甚么是单绞线?起首 从字母装分去看,R代表硬线,V代表PVC(续缘体),S代表单绞线。这咱们否以鸣RVSPVC续缘绞硬线。而且 铜导体的字母l否以省略。以是 否以很孬的懂得 RVS的齐称是铜芯PVC续缘多股硬线。从中不雅 上看,RVS是由二条RV线交错 而成,雅称单绞线、麻花线、花线等。由于 那种电...

保险好做吗(保险好做吗现在怎么样)

保险是一个愈来愈乏的止业。团队越年夜 越易治理 ,并且 是为了赞助 他人 事情 。尔正在为本身 的曲销团队事情 。越年夜 越轻易 。并且 否以树立 本身 的财产 渠叙,真现非事情 支出。当保险退没时,它便掉 来了统统 。保险私司如今 也正在逐步 分别 保险署理 人,许可 他们成坐本身 的自力 署理...

评论列表

丑味叙詓
3年前 (2022-05-29)

://it2.php.net/htmlspecialcharshttp://it2.php.net/strip_tags

竹祭鸽屿
3年前 (2022-05-29)

nly最早由微软提出,至今已经成为一个标准。浏览器将禁止页面的Javascript访问带有HttpOnly属性的Cookie。目前主流浏览器都支持,HttpOnly解决是XSS后的Cookie支持攻击。我们来看下百度有没有使用。未登录时的Cookie信息可以看到,所有C

孤鱼离祭
3年前 (2022-05-29)

ilter = new lib_filter();echo $filter-go('1+11');它输出的是1,这大大歪曲了数据的语义,因此什么情况应该对哪些字符进行过滤应该适情况而定。三、输出检查大多人都知道输入需

鸽吻谨兮
3年前 (2022-05-29)

和数字的组合,或者邮箱电话,我们会在前端用js进行检查,但在服务器端代码必须再次检查一次,因为客户端的检查很容易绕过。网上有许多开源的“XSS Filter”的实现

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。