0

このURLには、テキスト付きのパラメータが含まれています。

my-page.php?id_article = 1&alias = article-name

書き直した後の結果は次のとおりです。

1-article-name.php

id_articleパラメータについては、このセキュリティを作成しました:

if (isset($_GET[id_article] && $_GET[article] != null && $_GET[id_article] >= 1 && $_GET[id_article] <= 4 && (int) $_GET[id_article])

テキストを受け入れるエイリアスパラメータに対して何ができますか?

4

2 に答える 2

2

まず、エイリアスはデータベースから取得しますか?

あなたの例のために:

my-page.php ?id_article=1&alias=article-name

書き直した後の結果は次のとおりです。

1-article-name.php

私の質問は:何を表示する1-article-name.phpのですか、コンテンツはmysqlデータベースから取得されますか?

mysql_real_escape_stringその場合は、エイリアスをサニタイズするために使用します。

もちろん、最初にエイリアスを空にすることはできません。

if(!empty($_GET['alias'])){}

その後、mysql_real_escape_string

、、、などは安全$_GETだとは思わないでください。$_POST$_COOKIE

MySqlをターゲットとするSQLに文字列を埋め込む場合は、関数を使用mysql_real_escape_stringして変数をサニタイズしてください。この目的のために、MySqlの関数を使用して文字列をエスケープする必要があります。

使用htmlspecialcharsHTMLマークアップ内に文字列を埋め込む場合は、htmlspecialcharsでエスケープする必要があります。これは、すべてのechoまたはprintステートメントでhtmlspecialcharsを使用する必要があることを意味します。

幸運を。

于 2012-10-13T14:32:19.483 に答える
1

ほとんどの場合、ルートをサニタイズする必要はありません。期待どおりのルートを確認するだけです。

<?php 
//id_article (Not empty and is numeric and lower then or equals 4)
if(!empty($_GET['id_article']) && is_numeric($_GET['id_article']) && $_GET['id_article'] <= 4){}

//alias (Not empty)
if(!empty($_GET['alias'])){}
?>

ノート:

ルートを選択したファイルにするかどうかを決定する場合(例:./some_path/1-article-name.php:)、少なくともbasename()を使用して、ファイルが存在することを確認する必要があります。

データベースに対して文字列をクエリする場合は、パラメータをSQLエスケープするか、プリペアドステートメントでPDOまたはmysqliを使用する必要があります。

于 2012-10-13T14:42:13.510 に答える