문제

안녕하세요 Im 내 웹 사이트를 테스트하기 위해 Acunetix를 사용 하여이 스크립트에 문제가 있습니다. http://boedesign.com/blog/2007/02/18/ajax-star-rating/

Acunetix는 메시지가 표시되지 않지만 블라인드 SQL을 테스트 할 때 다음과 같은 값을 얻을 수 있습니다.

8 and 1=0 --
8 and 31337-31337=0

RATED_ID MYSQL 열에서, 나는 거기에 숫자 만 허용하고 싶기 때문에 약간의 수정을했지만 첫 번째 숫자는 8이기 때문에 IF를 통과 할 수있는 방법은 무엇입니까? 포함/rating_process.php에서 이와 같은 것입니다

// IF JAVASCRIPT IS ENABLED
if($_POST){
$id = escape($_POST['id']);
$rating = (int) $_POST['rating'];

if($rating <= 5 && $rating >= 1 && $id >= 1 && $id <=9999999){

if(@mysql_fetch_assoc(mysql_query("SELECT id FROM ratings WHERE IP = '".$_SERVER['REMOTE_ADDR']."' AND rating_id = '$id'")) || isset($_COOKIE['has_voted_'.$id])){

echo 'already_voted';  
} else {

그리고 "// JavaScript가 비활성화 된 경우"에서 거의 같은 생각

도움이 되었습니까?

해결책

등급이 정수 여야한다는 것을 알고 있다면 변수를 정수로 시전 할 수 있습니다.

$rating = (int) $_POST['rating'] ;

당신은 당신의 일을 잘 할 수 있습니다 id 변하기 쉬운.

정수 값 만 가지고 있음을 보장합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top