0
HTTP要求ラインを反復して正当性を判断しようとしています。最終的には、私のサーバーは、要求ラインがどのように見えるか、どれくらい長くなるかを知りません。正当なリクエストが以下のようなものであると仮定します。それは2つのスペースしか持たないことに注意してください。1つは?、もう1つはinternalではありません。 "私はスペースを最小限にとどめるためにリクエストラインを繰り返し処理する必要があります。以下は、点字のようなものになるだろう。以下は、2つの空白などがあるかどうかを調べるための試みで、intとポインタを比較しているとエラーを返した。それは、反復に加えて、以下の機能が役立つことがあります。!strchr、strcpyの、strncmpは、strncpyを、はstrstrどれ方向をいただければ幸いですリクエストラインをCで繰り返す
int main()
{
const char* line = "GET /path/script.cgi?field1=value1&field2=value2 HTTP/1.0";
parse(line);
}
bool parse(const char* line)
{
int spaces = 0;
int n = strlen(line);
for (int i = 0; i < n; i++)
{
if (line[i] == " ")
spaces++;
}
if (spaces == 2)
{
printf("Only 2 spaces!\n");
return true;
}
else
{
printf("Illegal request! More than two spaces! Hacker! Hacker! Help!\n");
return false;
}
}
'if(line [i] == "") '' line [i] 'という文字列と文字列 '" "を比較しています。それが苦情の原因です。 if(line [i] == "" [0]) '(感知できない)や' if(line [i] == '') '(感知)のいずれかを使用して問題を解決することができます。一重引用符で囲まれた文字定数と二重引用符で囲まれた文字列定数の違いを理解することは重要です。また、呼び出す前に 'parse()'を宣言する必要があります。コンパイラは、あなたがそれをしないときに戻り値の型が 'int'(それがまったくそれを受け入れるならば)であると仮定します。 –
GET/path/wotnot HTTP/1.0 "は、(固定比較で)有効ではないにもかかわらず、2つのスペースがあるため、有効であるとみなします。もっと敏感なテストが必要だと私は信じています。 –
@JonathanLefflerありがとう、Johnathan!私はそれが問題を引き起こしたことに正直に驚いています。私はあまりにも多くの言語で仕事をしていないし、Cが ""と "'の違いを知ったことは決してありませんでした。私は基本的な概念を調べます。再度、感謝します! – Ryan