2016-08-27 2 views
-3

저는 SO와 같은 질의 응답 웹 사이트를 운영하고 있습니다. 일부 시설에는 일부 제한이 있습니다. 예를 들어, 평판이 20 명 미만인 사용자는 투표를 할 수 없습니다. 또는 사용자는 200 가지 이상의 평판을 얻을 때까지 질문을 닫을 수 없습니다.사용자가 입력 한 웹 사이트의 입력을 어떻게 제어 할 수 있습니까?

글쎄, 질문에 대한 답변 작성과 같은 제한이없는 일도 있습니다. 이 경우 나쁜 사용자은 여러 질문에 대해 여러 가지 관련없는 답변을 쓸 수 있으며 내 데이터베이스를 쓸모없는 정보로 크게 만듭니다.

그래서 나는 새로운 대답을 삽입하기 전에 뭔가를 확인해야한다고 생각하니? 아니면 어쨌든, 내 웹 사이트의 입력을 어떻게 관리 할 수 ​​있습니까? 내가 말했듯이 현재 알고리즘에서 악의적 인 사용자 (스팸 발송자 또는 해커처럼)은 내 데이터베이스에 쓸모없는 데이터를 많이 입력 한 다음 1 일 후에 이해할 수 있습니다. (너무 늦음) 이 경우, 그를 막고 그의 모든 데이터를 제거하는 데 몇 번 걸립니다.

결론적으로, 나는 (예를 들어)과 같은 웹 사이트를 어떻게 처리할까요? 확인을 위해 새 대답을 삽입하기 전에 분리 된 쿼리가 필요합니까? 또는 무엇을?

참고 : 내가 PHP 와 MySQL (데이터베이스 코드 용) (서버 측 코드에 대한)를 사용합니다.

+0

예. 확인을위한 쿼리가 필요합니다. SO는 많은 쿼리를 사용하여 사용자가 수행 할 수있는 작업을 결정합니다. – Barmar

+0

@Barmar이게 뭔가를 의미합니까? http://stackoverflow.com/questions/38107025/how-can-i-count-something-before-inserting#38107363 –

답변

2

사실 꽤 쉽습니다. 마지막 작업 시간을 저장하고 지금 비교해야합니다.

function insertSth(//your args){ 
    $minimumInsertInterval = 10; // Minimum 10 seconds. 
    //You should check if interval ended. 
    if((microtime() - $_SESSION['lastInsertTime']) <= $minimumInsertInterval){ 
     //User can't do any operation. 
     return false; 
    } 
    //Insert operations 
    //At the end of your insert operations you need to write this microtime to Session. 
    $_SESSION['lastInsertTime'] = microtime(); 
} 
+0

예. 접근 방법 일 수 있습니다 .. 감사합니다 .. upvote –

0

Erol과 같은 조치를 취해야하지만 논리적 검사가 필요합니다. 가능한 작업을 설명하는 actions 테이블을 만들고 규칙을 설명하는 privileges 테이블을 만듭니다. 그런 다음 두 작업간에 테이블을 작성하여 각 조치에 필요한 특권을 저장하십시오. 조치를 실행하기 전에 조치에 필요한 모든 특권이 수행되는지 점검하십시오.

관련 문제