避免xss就足够了吗

Is it enough to avoid xss?

本文关键字:xss 避免      更新时间:2024-06-13

当用户放置<script>alert('Hello');</script>在我的网站上,即评论部分,其翻译为:<脚本>alert(你好)<脚本>这足以避免xss攻击我的网站吗?

如果将每个<转换为&lt;,将每个>转换为&gt;,则将阻止用户输入任何html标记。所以这就足够了。

也看看这些例子,以提高网站的安全性:

1.反射XSS的最佳安全性

<?php 
// Is there any input? 
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] !=     NULL ) { 
// Check Anti-CSRF token 
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); 
// Get input 
$name = htmlspecialchars( $_GET[ 'name' ] ); 
// Feedback for end user 
echo "<pre>Hello ${name}</pre>"; 
} 
// Generate Anti-CSRF token 
generateSessionToken(); 
?> 

2.存储XSS的最佳安全性

<?php 
if( isset( $_POST[ 'btnSign' ] ) ) { 
// Check Anti-CSRF token 
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' ); 
// Get input 
$message = trim( $_POST[ 'mtxMessage' ] ); 
$name    = trim( $_POST[ 'txtName' ] ); 
// Sanitize message input 
$message = stripslashes( $message ); 
$message = mysql_real_escape_string( $message ); 
$message = htmlspecialchars( $message ); 
// Sanitize name input 
$name = stripslashes( $name ); 
$name = mysql_real_escape_string( $name ); 
$name = htmlspecialchars( $name ); 
// Update database 
$data = $db->prepare( 'INSERT INTO guestbook ( comment, name ) VALUES ( :message, :name );' ); 
$data->bindParam( ':message', $message, PDO::PARAM_STR ); 
$data->bindParam( ':name', $name, PDO::PARAM_STR ); 
$data->execute(); 
} 
// Generate Anti-CSRF token 
generateSessionToken(); 
?>