PHP和XSS跨站攻击_PHP

Jun 01, 2016 pm 12:29 PM
pattern search the val 攻撃

其实这个话题很早就想说说了,发现国内不少PHP站点都有XSS漏洞。今天偶然看到PHP5的一个XSS漏洞,在此小结一下。顺便提醒,使用PHP5的朋友最好打下补丁,或者升级一下。

如果你不懂什么是XSS,可以看这里,或者这里(中文的也许会好懂一些)。

国内不少论坛都存在跨站脚本漏洞,例如这里 有一个Google Hack XSS的攻击例子,针对的是Discuz 4.0.0RC3。国外也很多这样的例子,甚至Google也出现过,不过在12月初时修正了。跨站攻击很容易就可以构造,而且非常隐蔽,不易被查觉(通常盗取信息后马上跳转回原页面)。
如何攻击,在此不作说明(也不要问我),主要谈谈如何防范。首先,跨站脚本攻击都是由于对用户的输入没有进行严格的过滤造成的,所以我们必须在所有数据进入我们的网站和数据库之前把可能的危险拦截。针对非法的HTML代码包括单双引号等,可以使用htmlentities() 。

$str = "A 'quote' is bold";

// Outputs: A 'quote' is bold
echo htmlentities($str);

// Outputs: A 'quote' is bold
echo htmlentities($str, ENT_QUOTES);
?>


这样可以使非法的脚本失效。

但是要注意一点,htmlentities()默认编码为 ISO-8859-1,如果你的非法脚本编码为其它,那么可能无法过滤掉,同时浏览器却可以识别和执行。这个问题我先找几个站点测试后再说。

这里提供一个过滤非法脚本的函数:

function RemoveXSS($val) {
// remove all non-printable characters. CR(0a) and LF(0b) and TAB(9) are allowed
// this prevents some character re-spacing such as
// note that you have to handle splits with \n, \r, and \t later since they *are* allowed in some inputs
$val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\x20])/', '', $val);

// straight replacements, the user should never need these since they're normal characters
// this prevents like PHP和XSS跨站攻击_PHP
$search = 'abcdefghijklmnopqrstuvwxyz';
$search .= 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$search .= '1234567890!@#$%^&*()';
$search .= '~`";:? /={}[]-_|\'\\';
for ($i = 0; $i // ;? matches the ;, which is optional
// 0{0,7} matches any padded zeros, which are optional and go up to 8 chars

// @ @ search for the hex values
$val = preg_replace('/([x|X]0{0,8}'.dechex(ord($search[$i])).';?)/i', $search[$i], $val); // with a ;
// @ @ 0{0,7} matches '0' zero to seven times
$val = preg_replace('/({0,8}'.ord($search[$i]).';?)/', $search[$i], $val); // with a ;
}

// now the only remaining whitespace attacks are \t, \n, and \r
$ra1 = Array('javascript', 'vbscript', 'expression', 'applet', 'meta', 'xml', 'blink', 'link', 'style', 'script', 'embed', 'object', 'iframe', 'frame', 'frameset', 'ilayer', 'layer', 'bgsound', 'title', 'base');
$ra2 = Array('onabort', 'onactivate', 'onafterprint', 'onafterupdate', 'onbeforeactivate', 'onbeforecopy', 'onbeforecut', 'onbeforedeactivate', 'onbeforeeditfocus', 'onbeforepaste', 'onbeforeprint', 'onbeforeunload', 'onbeforeupdate', 'onblur', 'onbounce', 'oncellchange', 'onchange', 'onclick', 'oncontextmenu', 'oncontrolselect', 'oncopy', 'oncut', 'ondataavailable', 'ondatasetchanged', 'ondatasetcomplete', 'ondblclick', 'ondeactivate', 'ondrag', 'ondragend', 'ondragenter', 'ondragleave', 'ondragover', 'ondragstart', 'ondrop', 'onerror', 'onerrorupdate', 'onfilterchange', 'onfinish', 'onfocus', 'onfocusin', 'onfocusout', 'onhelp', 'onkeydown', 'onkeypress', 'onkeyup', 'onlayoutcomplete', 'onload', 'onlosecapture', 'onmousedown', 'onmouseenter', 'onmouseleave', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onmousewheel', 'onmove', 'onmoveend', 'onmovestart', 'onpaste', 'onpropertychange', 'onreadystatechange', 'onreset', 'onresize', 'onresizeend', 'onresizestart', 'onrowenter', 'onrowexit', 'onrowsdelete', 'onrowsinserted', 'onscroll', 'onselect', 'onselectionchange', 'onselectstart', 'onstart', 'onstop', 'onsubmit', 'onunload');
$ra = array_merge($ra1, $ra2);

$found = true; // keep replacing as long as the previous round replaced something
while ($found == true) {
$val_before = $val;
for ($i = 0; $i $pattern = '/';
for ($j = 0; $j if ($j > 0) {
$pattern .= '(';
$pattern .= '([x|X]0{0,8}([9][a][b]);?)?';
$pattern .= '|({0,8}([9][10][13]);?)?';
$pattern .= ')?';
}
$pattern .= $ra[$i][$j];
}
$pattern .= '/i';
$replacement = substr($ra[$i], 0, 2).''.substr($ra[$i], 2); // add in to nerf the tag
$val = preg_replace($pattern, $replacement, $val); // filter out the hex tags
if ($val_before == $val) {
// no replacements were made, so exit the loop
$found = false;
}
}
}
}

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

2か月後、人型ロボットWalker Sが服をたたむことができるようになった 2か月後、人型ロボットWalker Sが服をたたむことができるようになった Apr 03, 2024 am 08:01 AM

Machine Power Report 編集者: Wu Xin 国内版の人型ロボット + 大型模型チームは、衣服を折りたたむなどの複雑で柔軟な素材の操作タスクを初めて完了しました。 OpenAIのマルチモーダル大規模モデルを統合したFigure01の公開により、国内同業者の関連動向が注目を集めている。つい昨日、中国の「ヒューマノイドロボットのナンバーワン株」であるUBTECHは、Baidu Wenxinの大型モデルと深く統合されたヒューマノイドロボットWalkerSの最初のデモを公開し、いくつかの興味深い新機能を示した。 Baidu Wenxin の大規模モデル機能の恩恵を受けた WalkerS は次のようになります。 Figure01 と同様に、WalkerS は動き回るのではなく、机の後ろに立って一連のタスクを完了します。人間の命令に従って服をたたむことができる

Vue 開発ノート: 一般的なセキュリティ脆弱性と攻撃を回避する Vue 開発ノート: 一般的なセキュリティ脆弱性と攻撃を回避する Nov 22, 2023 am 09:44 AM

Vue は、Web 開発で広く使用されている人気のある JavaScript フレームワークです。 Vue の使用が増え続けるにつれて、開発者は一般的なセキュリティの脆弱性や攻撃を回避するためにセキュリティの問題に注意を払う必要があります。この記事では、開発者がアプリケーションを攻撃からより適切に保護できるように、Vue 開発で注意を払う必要があるセキュリティの問題について説明します。ユーザー入力の検証 Vue 開発では、ユーザー入力の検証が非常に重要です。ユーザー入力は、セキュリティ脆弱性の最も一般的な原因の 1 つです。ユーザー入力を処理するとき、開発者は常に次のことを行う必要があります。

スクリプト攻撃を防ぐための Nginx の最適なソリューション スクリプト攻撃を防ぐための Nginx の最適なソリューション Jun 10, 2023 pm 10:55 PM

スクリプト攻撃を防ぐための Nginx の最適なソリューション スクリプト攻撃とは、悪意のある目的を達成するために、スクリプト プログラムを使用してターゲット Web サイトを攻撃する攻撃者の行為を指します。スクリプト攻撃には、SQL インジェクション、XSS 攻撃、CSRF 攻撃など、さまざまな形式があります。 Webサーバーでは、リバースプロキシ、ロードバランシング、静的リソースキャッシュなどでNginxが広く使われており、スクリプト攻撃に対してもNginxの利点を最大限に発揮し、効果的な防御を実現します。 1. Nginx が Ngin にスクリプト攻撃を実装する方法

PHP での CSRF 攻撃 PHP での CSRF 攻撃 May 25, 2023 pm 08:31 PM

インターネットの発展に伴い、Web アプリケーションが増えていますが、セキュリティ問題への注目も高まっています。 CSRF (CrossSiteRequestForgery、クロスサイト リクエスト フォージェリ) 攻撃は、ネットワーク セキュリティの一般的な問題です。 CSRF攻撃とは何ですか?いわゆる CSRF 攻撃とは、攻撃者がユーザーの ID を盗み、ユーザーの名を借りて違法な操作を実行することを意味します。平たく言えば、攻撃者がユーザーのログイン状態を利用して、ユーザーの知らないうちに何らかの不正な操作を実行することを意味します。

Java での Pattern.compile メソッドの使用 Java での Pattern.compile メソッドの使用 Feb 18, 2024 pm 09:04 PM

Java での Pattern.compile 関数の使用 Java の Pattern.compile 関数は、正規表現をコンパイルするために使用されるメソッドです。正規表現は、文字列の検索、置換、検証、その他の操作に使用できる強力な文字列一致および処理ツールです。 Pattern.compile 関数を使用すると、文字列パターンを Pattern オブジェクトにコンパイルでき、これを使用して一連の文字列操作を実行できます。パターン.コンピ

IPアドレスが攻撃された場合の対処方法 IPアドレスが攻撃された場合の対処方法 Oct 24, 2023 pm 03:45 PM

IP アドレス攻撃に対する解決策には、攻撃タイプの分析、ファイアウォールの設定、IP アドレスのブロック、通信リンクの隔離、関連機関への通知、セキュリティ保護の強化、証拠の収集、セキュリティ意識向上トレーニングの強化が含まれます。詳細な紹介: 1. 攻撃の種類を分析するには、まず攻撃の種類と方法を分析して、攻撃者の行動と目的を理解する必要があります; 2. ファイアウォールの設定、ファイアウォール ルールを構成することで、攻撃された IP へのアクセスを制限できます。 3. IP ブロック。攻撃トラフィックが非常に激しく、サーバーの通常の動作に重大な影響を与える場合は、攻撃されたサーバーを一時的にブロックするなどを検討できます。

ブラウザー会社が Arc Search を開始: AI 支援のアップグレードされた検索エクスペリエンス ブラウザー会社が Arc Search を開始: AI 支援のアップグレードされた検索エクスペリエンス Feb 01, 2024 am 09:18 AM

1月31日のニュースによると、TheBrowserCompanyは最近、AI技術を駆使し、ユーザーが必要な情報をより迅速かつ便利に入手できるようにすることを目的とした新しいアプリケーション「ArcSearch」をリリースしたという。 ArcSearch アプリケーションの中核となる機能は、OpenAI などの企業のモデルを利用した「Browseforme」機能です。この機能は、ユーザーが検索を行うと、関連する少なくとも6つのWebページを自動的に読み取り、その情報をAI技術によって統合および要約し、最終的に新たにデザインされたページ上でユーザーに表示することができます。このページには、検索キーワードに関連する情報が含まれているだけでなく、ユーザーにとってわかりやすくするためにコンテンツがいくつかの部分に分割されています。

PHP での XSS 攻撃 PHP での XSS 攻撃 May 23, 2023 am 09:10 AM

近年、インターネット情報技術の急速な発展により、私たちの生活はますますインターネットと切り離せないものになっています。ネットワークと私たちの日常生活との相互作用は、大量のコードの作成、送信、処理と切り離すことができません。そして、これらのコードはセキュリティを保護する必要があります。そうしないと、悪意のある攻撃者がそれらを使用してさまざまな攻撃を開始することになります。これらの攻撃の 1 つは XSS 攻撃です。この記事では、PHP における XSS 攻撃に焦点を当て、対応する防御方法を示します。 1. XSS 攻撃の概要 XSS 攻撃は、クロスサイト スクリプティング攻撃とも呼ばれ、通常、

See all articles