请问这个PHP下防范MySQL注入攻击的方法管用吗?
function strinput($input)
{
$input=strval($input);
$replace=array('union','load','and','or','select','update','insert','delete','create','char','ascII','ord','conv','=','--','#','*','%','_','\\','\'',"\"");
$input=str_ireplace($replace,"0",$input);
return $input;
}
定义一个这样的过滤函数,对所有GPC来的字符串数据都先过一遍。这样可以完全防范MySQL注入攻击吗?
回复内容:
这类的过滤只能给注入者增加一些麻烦,远远做不到完全防范。1、注入者可以用sElEcT来代替select
2、注入者可以用selselectect来让你过滤一遍,尝试获得select
3、注入者可以用url码来替代所有输入
4、注入者可以。。。用很多种方法,试出你的过滤函数是什么样的
你和注入者的技能可以在遭受泄露的拉锯战中不断获得提升。
直到你使用了以下方法的其中之一,才开始踏上了安全的征程:
1、白名单。严格定义只能输入哪些字符来查询,其他一律不行。
2、参数化查询。先将SQL语言编译,再代入参数。这时候就算他提交了select * from password where table=admin也只会去查询这一长串字符而不会执行SQL语句了。php下的示例如李世光所说。 这个函数做到完全防范MySQL注入攻击还是比较难的,攻与防本来就是动态的,要是实现一劳永逸的防守还是有难度的。
1、针对一些安全防御,可能目前没法绕过,但是随着对攻击技术的研究可能就会出现绕过方法,像dedecms、dz等的安全防御经常被bypass。
2、根据你业务的不同,实现业务的代码可能就提供了绕过方法。例如一个简单的搜索业务,可能在后面的代码会调用urldecode解码函数:
.....
$q = strinput($_GET['query']);
$q = urldecode($q);
$sql = "select * from table where key='".$q."'";
.....
你在urldecode前面做的所有过滤都是徒劳的
要做到尽量减少安全漏洞不只是sql注入,需要在恰当的地方做正确的事情。这可能要了解一些安全知识,像《白帽子讲web安全》,《web前端黑客》都是web安全不错的书籍。
php安全的在线文档(e文):Survive The Deep End: PHP Security 关于mysql防护其实很简单。
1.使用PDO::prepare PDO::bindParam来过滤输入参数
2.将HTML转成实体 htmlspecialchars 用PHP的PDO扩展去使用数据库,该扩展封装的类和方法已经考虑了防注入。 用PHP的安全函数在query的时候把变量转义一下就可以了。 建议使用参数化查询或白名单。
黑名单几乎在任何时候都是不可取的。 请使用pdo 不要自作聪明地过滤,总会有遗漏的地方的,你过滤不完的。
请用pdo + 参数绑定,一劳永逸,一了百了。 你要注意到,这样子很有可能过滤用户的合法输入。
过滤sql注入的方法常见的有如下两种:
1 mysql_real_escape_string
2 pdo的prepare+bind
另,网站安全性不止是sql注入一方面,还要考虑到csrf和xss等。 字符串过滤:
1>mysql_real_escape_string
2>PDO::prepare

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









ファンクションとは、関数を意味します。これは、特定の関数を備えた再利用可能なコード ブロックです。プログラムの基本コンポーネントの 1 つです。入力パラメータを受け取り、特定の操作を実行し、結果を返すことができます。その目的は、再利用可能なコード ブロックをカプセル化することです。コードの再利用性と保守性を向上させるコード。

準備 vuecreateexample を使用してプロジェクトを作成します パラメーターは大まかに以下のとおりです ネイティブ入力を使用します ネイティブ入力は主に値と変更です 変更する場合はデータを同期する必要がありますApp.tsx は次のとおりです: import{ref}from'vue';exportdefault{setup(){//username はデータです constusername=ref('Zhang San');//入力ボックスが変更されると、データを同期します constonInput =;return( )=>({

laravel入力の隠しフィールドを実装する方法: 1. Bladeテンプレートファイルを見つけて開きます; 2. Bladeテンプレートのmethod_fieldメソッドを使用して隠しフィールドを作成します。作成構文は「{{ method_field('DELETE') }}」です。 」。

MySQL は、データを処理および操作するためのさまざまな機能を提供する、一般的に使用されるリレーショナル データベース管理システムです。このうち、REPLACE関数は文字列の指定した部分を置き換える関数です。この記事では、MySQL で文字列を置換するための REPLACE 関数の使用方法を紹介し、コード例を通してその使用法を示します。まず、REPLACE 関数の構文を見てみましょう: REPLACE(str,search_str,replace_str)。

カーソルなしで入力ボックスをクリックする場合の解決策: 1. 入力ボックスのフォーカスを確認する; 2. ブラウザのキャッシュをクリアする; 3. ブラウザを更新する; 4. JavaScript を使用する; 5. ハードウェア デバイスを確認する; 6. 入力を確認するボックスのプロパティ; 7. JavaScript コードをデバッグする; 8. ページの他の要素を確認する; 9. ブラウザーの互換性を考慮する。

Python での文字列検索と置換のテクニックは何ですか? (具体的なコード例) Python では文字列が一般的なデータ型であり、日常のプログラミングでは文字列の検索や置換操作によく遭遇します。この記事では、一般的な文字列の検索と置換のテクニックを、具体的なコード例とともに紹介します。文字列内の特定の部分文字列を検索するには、文字列の find() メソッドまたは Index() メソッドを使用できます。 find() メソッドは、文字列内で最初に出現した部分文字列のインデックスを返します。

この記事では、Python の enumerate() 関数と「enumerate()」関数の目的について学びます。 enumerate() 関数とは何ですか? Python の enumerate() 関数は、データ コレクションをパラメータとして受け取り、列挙オブジェクトを返します。列挙オブジェクトはキーと値のペアとして返されます。キーは各項目に対応するインデックス、値は項目です。構文 enumerate(iterable,start) パラメータ iterable - 渡されたデータ コレクションは、iterablestart と呼ばれる列挙オブジェクトとして返すことができます。 - 名前が示すように、列挙オブジェクトの開始インデックスは start によって定義されます。無視したら

MySQL.proc テーブルの役割と機能の詳細な説明。MySQL は人気のあるリレーショナル データベース管理システムです。開発者が MySQL を使用する場合、多くの場合、ストアド プロシージャ (StoredProcedure) の作成と管理が必要になります。 MySQL.proc テーブルは非常に重要なシステム テーブルであり、ストアド プロシージャの名前、定義、パラメータなど、データベース内のすべてのストアド プロシージャに関連する情報が保存されます。この記事では、MySQL.proc テーブルの役割と機能について詳しく説明します。
