0

データベースを使用して質問と回答などのフォーラムを投稿するための Web サイトを所有しています。XSS インジェクションと SQl インジェクションの両方を防ぐために、コードを強化したいと考えています。

XSS では、次の関数を使用しました: Strip_tags htmlspecialchars htmlentities

私の質問は: それらの違いは何ですか?? また、私はそれらの問題に直面しています:1-テキストエリアとデフォルトテキストのテキストボックスがあります2-上記の関数を使用し、テキストエリアにテストを入力した場合..出力は私が書いたものを取りませんテキストエリア..常にデフォルト値を取ります...

これは私がしたことです

$first_name = $_POST['first_name'];
$first_name = htmlspecialchars($first_name);
echo $first_name

また、誰もがSQLインジェクションを防ぐことについて何らかの考えを持っています..

4

2 に答える 2

0

マニュアルから直接。 http://php.net/manual/en/mysqli.prepare.php

<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$city = "Amersfoort";

/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {

    /* bind parameters for markers */
    $stmt->bind_param("s", $city);

    /* execute query */
    $stmt->execute();

    /* bind result variables */
    $stmt->bind_result($district);

    /* fetch value */
    $stmt->fetch();

    printf("%s is in district %s\n", $city, $district);

    /* close statement */
    $stmt->close();
}

/* close connection */
$mysqli->close();
?>

XSSの場合、strip_tagsで十分です。誰かがFTPパスワードを解読してファイルを編集したり、エクスプロイトのアップロードを許可したりしない限り、アップロードフォルダでのスクリプトの実行を無効にしてください。

于 2012-11-10T12:16:35.450 に答える
0

XSSを防ぐには、出力先の領域に応じて異なるフィルタリングルールを使用する必要があります。

hmtlentities(これはに変換<され&lt;ます)は問題ありませんが、安全でない変数を<head>orまたは<script>or<style>タグに出力します。

もう1つの注意が必要な領域は、タグ属性です。これは<input onMouseDown=""、ユーザーが文字列を壊して独自の属性を追加できるためです(SQLインジェクションのように)。

この主題は、次の場所で詳細に説明されています。

http://adamjonrichardson.com/2012/02/01/improving-xss-cross-site-scripting-prevention-in-four-simple-steps/ https://www.golemtechnologies.com/articles/prevent-xss

PHPのfilter_var関数の使用を調べることもできます。これは非常に便利です。

于 2012-11-10T12:17:32.807 に答える