first
This commit is contained in:
230
safekiso_admin/content/doc/api_doc.md
Normal file
230
safekiso_admin/content/doc/api_doc.md
Normal file
@@ -0,0 +1,230 @@
|
||||
**(사)한국인터넷자율정책기구 KSS(KISO Safeguard System)API 서비스**
|
||||
## API 연동 안내
|
||||
|
||||
### 개요
|
||||
|
||||
KISO Safeguard System API 서비스는 제시된 문자열 중에 미리 준비된 욕설·비속어 DB에 포함된
|
||||
표현이 있는지를 빠르게 검사하고 그 결과를 돌려 주는 API 서비스 입니다.
|
||||
|
||||
- 사전 비교 방식 (2024년 4월 현재 80만여 표현)
|
||||
- 아호코라식(Aho-Corasick) 알고리즘으로 빠른 검색
|
||||
|
||||
|
||||
|
||||
### 호출 주소
|
||||
|
||||
```log
|
||||
https://www.safekiso.com/api/v1/filter
|
||||
\___/ \_______________/ \____/ \____/
|
||||
| | | |
|
||||
protocol domain version api name
|
||||
|
||||
```
|
||||
|
||||
|
||||
|
||||
### API 호출 파라메타
|
||||
|
||||
콘텐츠 타입은 application/x-www-form-urlencoded, 메쏘드는 POST로 호출 합니다.
|
||||
|
||||
|
||||
| location | name | mandatory | Description |
|
||||
|-------------|-------------|-------------|-------------|
|
||||
| header | x-api-key | `required` | API 키 |
|
||||
| body | text | `required` | 필터 검사 대상이 되는 문자열 |
|
||||
| body | mode | `required` | 필터 모드. quick인 경우 첫번째 매칭이 발견되면 더 이상 검색하지 않고 결과값을 리턴. normal인 경우 전체를 검사하고 그 결과를 리턴. filter인 경우 전체를 검사하고 그 결과로 필터된 단어를 필터 마스크(*)로 대체한 대체 텍스트까지 결과에 포함함. |
|
||||
| body | callback | `optional` | 비동기 처리 요청 응답 수신 url. 여기에 값이 설정되면 요청은 작업 큐에 저장된 후 처리 완료 후 해당 주소에 대한 호출로 결과를 리턴합니다. |
|
||||
| body | checksum | `optional` | API 키를 클라이언트에서 사용하려는 경우 만료 시간을 설정하고 검증하기 위한 체크값 |
|
||||
| body | ts | `optional` | 체크값 생성 근거가 되는 타임 스템프값 |
|
||||
|
||||
### API 호출 결과값
|
||||
|
||||
API 서버가 어떤 방식으로든 동작하고 있다면 서버는 HTTP(S) 호출에 대한 응답으로 반드시 200 [HTTP/1.1 - RFC2616에 명세된](https://www.ietf.org/rfc/rfc2616.txt)으로 응답합니다. 이 경우 표준 응답값과 별개로 본 서비스에서는 아래와 같은 Status.Code의 값을 이용하여 서비스의 상태와 호출 결과값을 표시합니다. 만약 표준 호출 응답이 200이 아닌 경우라면 본 서비스 자체가 아니라 로드 밸런서, 게이트 웨이 등 여러가지 레이어에서 서비스 제공이 불가능하여 응답을 보낸 것으로 판단할 수 있습니다. 이 경우에는 그 컨벤션에 맞춰 대응하시면 됩니다.
|
||||
|
||||
| Status.Code | Description |
|
||||
|-------------|-------------|
|
||||
| `2000 OK` | 모든 처리가 완료되어 정상적으로 결과를 되돌리는 경우 이 코드를 사용하게 됩니다. |
|
||||
| `2020 Accepted` | 호출 파라메타중 callback에 값이 설정된 경우 실제 요청에 대한 처리를 하지 않고 일단 작업큐에 저장한 후에 이 응답이 발생합니다. 이 응답은 지정된 callback 주소를 호출할때에 응답에 함께 포함된 TrackingId의 값을 참조하여 매치할 수 있습니다. |
|
||||
| `4000 Bad Request` | 어떤 이유로 지금 수신한 호출에 정상 처리가 불가능합니다. 보통의 경우 필요한 파라메타가 누락된 경우 또는 해당 파라메타에 부적절한 값이 들어가 있는 경우, 부가적인 체크섬 체크 옵션이 켜져있으나 체크에 실패한 경우 입니다. 구체적인 이유는 Status.Description의 메세지를 참고하여 조건을 수정한 후에 다시 호출해야 합니다.|
|
||||
| `4010 Unauthorized` | 요청을 인증할 API 키 값이 없는 경우 발생하는 오류 입니다. `4030 Forbidden` 오류와 다른 경우임에 주의해 주세요.|
|
||||
| `4030 Forbidden` | 서버에서 요청에 API 키값을 인식하였으나 해당 키가 적절한 권한을 가지지 않았다고 판정한 경우 발생합니다. 보안상의 이유로 4040과 같은 코드를 사용하지는 않는다는 점을 참고해 주세요. |
|
||||
| `4290 Too Many Requests` | 아이피를 기준으로 특정 클라이언트가 너무 많은 요청을 단위시간 안에 보낸 경우에 이 응답이 리턴됩니다. 서버측에서 사용자들의 입력을 처리하는 경우에는 이 값에 주의해서 미리 큰 값으로 설정해 주어야 하며, 관리자에게 문의하여 처리가 가능합니다. |
|
||||
| `5000 Internal Server Error` | 서버측의 문제로 요청에 대한 처리가 불가능한 경우 오류가 발생하였음을 알리기 위해 본 코드를 사용합니다. Description에서 보다 상세한 오류 메세지를 확인할 수 있으며 보통의 경우 이 오류는 잠시 후에 다시 시도하는 것으로 극복 가능합니다. |
|
||||
| `5030 Service Unavailable` | 현재 서비스가 점검중이므로 서비스 응답할 수 없는 경우 발생합니다. |
|
||||
|
||||
|
||||
### !!! 주의 !!!
|
||||
|
||||
여기에 명세된 Status.Code는 http의 호출 결과 상태 코드(http status code)와 다릅니다. 그 값을 기반으로 뒤에 0을 하나 더 붙여 만들어 진 것들로 의미를 연상하기 쉽도록 만들어 진 것이나 그대로 같은 의미가 아니고 둘은 서로 다른 값이니 참고하여 주세요. 예를 들어 Status.Code의 값이 4290인 경우에도 http status의 값은 200이 오는 것이 정상입니다. 이런 설정을 가진 이유는, API 서비스를 호출하는 과정에서 서버가 반응하지 않는 경우에는 http status의 값으로 상황을 판단하고 일단 호출 결과 http status의 값이 200이라면 이는 API 서버가 작성한 결과값이 도착했음을 의미한다고 봐도 좋습니다. http status의 값이 429가 오는 경우에는 KSS를 호스팅 하는 인프라에서 자체적으로 판단하여 호출수가 너무 많다고 판정한 경우입니다.
|
||||
|
||||
|
||||
### API 사용예
|
||||
|
||||
몇가지 방법으로 예를 보이면 아래와 같습니다.
|
||||
|
||||
|
||||
cURL
|
||||
|
||||
```sh
|
||||
curl --location --request POST 'https://www.safekiso.com/api/v1/filter' \
|
||||
--header 'x-api-key: <YOUR-API-KEY-HERE>' \
|
||||
--header 'Content-Type: application/x-www-form-urlencoded' \
|
||||
--data-urlencode 'text=검사할 문장을 이곳에 넣어 주세요.' \
|
||||
--data-urlencode 'mode=filter' \
|
||||
```
|
||||
|
||||
JavaScript - Fetch
|
||||
|
||||
```sh
|
||||
|
||||
var myHeaders = new Headers();
|
||||
myHeaders.append("x-api-key", "<YOUR-API-KEY-HERE>");
|
||||
myHeaders.append("Content-Type", "application/x-www-form-urlencoded");
|
||||
|
||||
|
||||
var urlencoded = new URLSearchParams();
|
||||
urlencoded.append("text", "검사할 문장을 이곳에 넣어 주세요.");
|
||||
urlencoded.append("mode", "filter");
|
||||
|
||||
var requestOptions = {
|
||||
method: 'POST',
|
||||
headers: myHeaders,
|
||||
body: urlencoded,
|
||||
redirect: 'follow'
|
||||
};
|
||||
|
||||
fetch("https://www.safekiso.com/api/v1/filter", requestOptions)
|
||||
.then(response => response.text())
|
||||
.then(result => console.log(result))
|
||||
.catch(error => console.log('error', error));
|
||||
|
||||
```
|
||||
|
||||
|
||||
NodeJs - Native
|
||||
|
||||
```sh
|
||||
var https = require('follow-redirects').https;
|
||||
var fs = require('fs');
|
||||
|
||||
var qs = require('querystring');
|
||||
|
||||
var options = {
|
||||
'method': 'POST',
|
||||
'hostname': 'www.safekiso.com',
|
||||
'path': '/api/v1/filter',
|
||||
'headers': {
|
||||
'x-api-key': '<YOUR-API-KEY-HERE>',
|
||||
'Content-Type': 'application/x-www-form-urlencoded',
|
||||
},
|
||||
'maxRedirects': 20
|
||||
};
|
||||
|
||||
var req = https.request(options, function (res) {
|
||||
var chunks = [];
|
||||
|
||||
res.on("data", function (chunk) {
|
||||
chunks.push(chunk);
|
||||
});
|
||||
|
||||
res.on("end", function (chunk) {
|
||||
var body = Buffer.concat(chunks);
|
||||
console.log(body.toString());
|
||||
});
|
||||
|
||||
res.on("error", function (error) {
|
||||
console.error(error);
|
||||
});
|
||||
});
|
||||
|
||||
var postData = qs.stringify({
|
||||
'text': '검사할 문장을 이곳에 넣어 주세요.',
|
||||
'mode': 'filter',
|
||||
});
|
||||
|
||||
req.write(postData);
|
||||
|
||||
req.end();
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
### 초당 호출수 과다 오류 발생하는 경우
|
||||
응답 코드 4290이 발생하는 경우에는 [netsafe@kiso.or.kr](mailto:netsafe@kiso.or.kr)로 연락을 주셔서 키 마다 설정되는 초당 최대 호출수 설정을 변경해 주셔야 합니다. 베타 서비스 시점에서 각 API 키의 초당 최대 호출수 제한은 100으로 설정되어 있으나, 이는 사전 예고 없이 조정된 후 공지될 수 있으니 참고해 주세요. 만약 기본 값보다 더 많은 초당 호출수가 필요한 경우에는 별도의 협약이 필요하니 [netsafe@kiso.or.kr](mailto:netsafe@kiso.or.kr)로 메일 주시기 바랍니다.
|
||||
|
||||
|
||||
### 비동기 방식으로 서비스를 호출하는 경우
|
||||
|
||||
callback에 콜백할 주소를 지정하면 KSS에서는 우선 다음과 같은 응답이 도착 합니다.
|
||||
```
|
||||
{
|
||||
"TrackingId": "7408a8f2-5843-59f5-8352-9ef2f80d89ec",
|
||||
"Status": {
|
||||
"Code": 2020,
|
||||
"Message": "Accepted",
|
||||
"Description": "Filter work created with trackingId 7408a8f2-5843-59f5-8352-9ef2f80d89ec"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
실제 주어진 문장에 대한 필터 작업이 끝난 후에는 지정된 웹 주소로 다음과 같은 코드가 동작 합니다.
|
||||
```
|
||||
let options = {
|
||||
uri: req.body.callback,
|
||||
method: 'POST',
|
||||
body: response,
|
||||
json: true,
|
||||
};
|
||||
|
||||
request.post(options, function (error, response, body) {
|
||||
localHandler.handleApiFinalResponse(req, response, {
|
||||
error: error,
|
||||
response: response,
|
||||
body: body,
|
||||
});
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
응답(response)의 예는 아래와 같습니다.
|
||||
```
|
||||
{
|
||||
"TrackingId": "7408a8f2-5843-59f5-8352-9ef2f80d89ec",
|
||||
"Status": {
|
||||
"Code": 2000,
|
||||
"Message": "OK",
|
||||
"Description": ""
|
||||
},
|
||||
"Detected": [
|
||||
[
|
||||
3,
|
||||
"개자식"
|
||||
]
|
||||
],
|
||||
"Filtered": "이런 ***을 봤나.",
|
||||
"Elapsed": "0 s, 10.448 ms"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 클라이언트측에서 API 키를 사용하려는 경우
|
||||
|
||||
이 경우 먼저 [netsafe@kiso.or.kr](mailto:netsafe@kiso.or.kr) 메일로 사용하실 키를 알려 주시고 저희가 기반 설정을 마친 후에 구체적인 검증값 생성 방법과 테스트를 도와 드립니다. 이 방식에 대한 상세한 안내는 보안과 관련이 있으므로 부득이 메일로 개별 안내 하는 것에 대해 양해 부탁 드립니다.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
### 기타 API 서비스 이용 안내
|
||||
|
||||
<a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/doc/guide" >서비스 이용 안내</a> 를 참고해 주세요.
|
||||
|
||||
|
||||
|
||||
|
||||
### License
|
||||
Copyright © 2023 [(사)한국인터넷자율정책기구](https://www.kiso.or.kr/)
|
||||
|
||||
23
safekiso_admin/content/doc/bill.md
Normal file
23
safekiso_admin/content/doc/bill.md
Normal file
@@ -0,0 +1,23 @@
|
||||
**(사)한국인터넷자율정책기구 KSS(KISO Safeguard System)API 서비스**
|
||||
## 서비스 이용 요금
|
||||
|
||||
### 기본 설정
|
||||
|
||||
KISO Safeguard System API 서비스는 KISO 회원사, 관공서, 언론사에는 무료로 제공되며 그 외에는 월 6만원의 사용료가 부과되고 사용량의 제한은 다음과 같습니다.
|
||||
|
||||
| 항목 | 제한 값 |
|
||||
|--------------------|-------------|
|
||||
| 초당 호출 수 | 100회 (하나의 API 키 마다 제한) |
|
||||
| 일 최대 호출 수 | 8,640,000회 |
|
||||
| 계정 당 키 생성 제한 | 5개 |
|
||||
|
||||
|
||||
단, 이 내용은 내부 사정에 따라 향후 변경될 수 있음을 알려 드립니다.
|
||||
|
||||
계정당 키 생성 제한이나 초당 호출 제한 등은 시스템을 함께 사용하는 다른 고객사에 문제가 생기지 않도록 하기 위한 최소한의 제한이며 실제로 허용된 최대 사용량을 사용하는 경우에는 전체 시스템의 안정성을 위하여 별도의 협약이 필요할 수 있습니다.
|
||||
|
||||
또한 위 사용량 제한보다 더 많은 호출이 필요한 경우에는 별도의 논의와 협의를 거쳐 서비스를 제공하는 방법이 마련되어 있으니 문의 바랍니다.
|
||||
### License
|
||||
|
||||
(사)한국인터넷자율정책기구
|
||||
|
||||
93
safekiso_admin/content/doc/certification.md
Normal file
93
safekiso_admin/content/doc/certification.md
Normal file
@@ -0,0 +1,93 @@
|
||||
**(사)한국인터넷자율정책기구 KSS(KISO Safeguard System)API 서비스**
|
||||
## 인증 로고 안내
|
||||
|
||||

|
||||
|
||||
KSS API를 이용하는 서비스에서 필터된 결과를 사용자에게 표시할 때에 혹은 필터가 될 것임을 안내하는 경우에 활용하실 수 있도록 인증 로고를 준비 하였습니다. 인증 로고는 다음과 같은 효과를 기대하고 만들어 졌습니다.
|
||||
|
||||
- 사용자 입력에 대한 표준적인 대응을 구현하였음을 사전에 표시하여 서비스 신뢰도 향상
|
||||
- 사용자들에게 필터 DB의 관리 주체를 명시함으로써 운영의 편의성과 객관성을 확보
|
||||
|
||||
|
||||
|
||||
### 준비된 내용
|
||||
|
||||
- 로고의 제작 의도 [1](/logos/description/kss_certification_logo_01.jpg){:target="_blank"} [2](/logos/description/kss_certification_logo_02.jpg){:target="_blank"} [3](/logos/description/kss_certification_logo_03.jpg){:target="_blank"} [4](/logos/description/kss_certification_logo_04.jpg){:target="_blank"}
|
||||
- 직사각 기본 로고 : [영문 컬러 버전](/logos/kss_certification_logo_box_english.png){:target="_blank"}, [영문 흑백 버전](/logos/kss_certification_logo_box_english_g.png){:target="_blank"}, [한글 컬러 버전](/logos/kss_certification_logo_box_korean.png){:target="_blank"}, [한글 흑백 버전](/logos/kss_certification_logo_box_korean_g.png){:target="_blank"} (png 포맷)
|
||||
- 간단 심볼 : [영문 컬러 버전](/logos/kss_certification_logo_symbol.png){:target="_blank"}, [영문 흑백 버전](/logos/kss_certification_logo_symbol_g.png){:target="_blank"} (png 포맷)
|
||||
- 정사각 로고 : [영문 컬러 버전](/logos/kss_certification_logo_variation_english.png){:target="_blank"}, [영문 흑백 버전](/logos/kss_certification_logo_variation_english_g.png){:target="_blank"}, [한글 컬러 버전](/logos/kss_certification_logo_variation_korean.png){:target="_blank"}, [한글 흑백 버전](/logos/kss_certification_logo_variation_korean_g.png){:target="_blank"} (png 포맷)
|
||||
|
||||
|
||||
|
||||
### 사용 예
|
||||
|
||||
인증 로고는 위에 링크로부터 직접 다운로드 받아서 활용하실 수 도 있고, 아래와 같이 HTML태그로 KSS 서버로부터 불러 사용하실 수도 있습니다.
|
||||
|
||||
아래는 인증 로고를 클릭 하는 경우 설명 페이지로 이동하는 태그까지 포함한 예 입니다.
|
||||
|
||||
|
||||
``` html
|
||||
<a href="https://www.safekiso.com/doc/kss" rel="nofollow" title="KSS API Site Certification Logo"><img src="https://www.safekiso.com/logos/kss_certification_logo_box_english.png" width="243" height="66" title="KSS API로 보호되고 있는 사이트 입니다." alt="KSS API Site Certification Logo"/></a>
|
||||
```
|
||||
|
||||
위와 같은 코드는 아래와 같은 결과로 표시 됩니다.
|
||||
|
||||
<a href="https://www.safekiso.com/doc/kss" rel="nofollow" title="KSS API Site Certification Logo"><img src="https://www.safekiso.com/logos/kss_certification_logo_box_english.png" width="243" height="66" title="KSS API로 보호되고 있는 사이트 입니다." alt="KSS API Site Certification Logo"/></a>
|
||||
|
||||
|
||||
|
||||
아래 코드는 영문 흑백 버전의 경우를 보여 줍니다.
|
||||
|
||||
|
||||
``` html
|
||||
<a href="https://www.safekiso.com/doc/kss" rel="nofollow" title="KSS API Site Certification Logo"><img src="https://www.safekiso.com/logos/kss_certification_logo_box_english_g.png" width="243" height="66" title="KSS API로 보호되고 있는 사이트 입니다." alt="KSS API Site Certification Logo"/></a>
|
||||
```
|
||||
|
||||
위와 같은 코드는 아래와 같은 결과로 표시 됩니다.
|
||||
|
||||
<a href="https://www.safekiso.com/doc/kss" rel="nofollow" title="KSS API Site Certification Logo"><img src="https://www.safekiso.com/logos/kss_certification_logo_box_english_g.png" width="243" height="66" title="KSS API로 보호되고 있는 사이트 입니다." alt="KSS API Site Certification Logo"/></a>
|
||||
|
||||
|
||||
아래 코드는 심볼만을 표시하는 경우를 보여 줍니다.
|
||||
|
||||
|
||||
``` html
|
||||
<a href="https://www.safekiso.com/doc/kss" rel="nofollow" title="KSS API Site Certification Logo"><img src="https://www.safekiso.com/logos/kss_certification_logo_symbol.png" width="62" height="72" title="KSS API로 보호되고 있는 사이트 입니다." alt="KSS API Site Certification Logo"/></a>
|
||||
```
|
||||
|
||||
위와 같은 코드는 아래와 같은 결과로 표시 됩니다.
|
||||
|
||||
<a href="https://www.safekiso.com/doc/kss" rel="nofollow" title="KSS API Site Certification Logo"><img src="https://www.safekiso.com/logos/kss_certification_logo_symbol.png" width="62" height="72" title="KSS API로 보호되고 있는 사이트 입니다." alt="KSS API Site Certification Logo"/></a>
|
||||
|
||||
|
||||
|
||||
|
||||
아래 코드는 사각형 영역의 우측 하단에 로고를 표시하는 경우를 보여 줍니다.
|
||||
|
||||
|
||||
``` html
|
||||
<a href="https://www.safekiso.com/doc/kss" rel="nofollow" title="KSS API Site Certification Logo"><img src="https://www.safekiso.com/logos/kss_certification_logo_variation_english.png" width="143" height="105" title="KSS API로 보호되고 있는 사이트 입니다." alt="KSS API Site Certification Logo"/></a>
|
||||
```
|
||||
|
||||
위와 같은 코드는 아래와 같은 결과로 표시 됩니다.
|
||||
|
||||
|
||||
<a href="https://www.safekiso.com/doc/kss" rel="nofollow" title="KSS API Site Certification Logo"><img align="right" src="https://www.safekiso.com/logos/kss_certification_logo_variation_english.png" width="143" height="105" title="KSS API로 보호되고 있는 사이트 입니다." alt="KSS API Site Certification Logo"/></a>
|
||||
|
||||
<br/><br/>
|
||||
|
||||
<br/><br/>
|
||||
|
||||
|
||||
### 주의 사항
|
||||
|
||||
인증 로고를 서비스에 활용하시는 경우 KSS 사이트로부터 직접 링크하는 경우 파일의 위치가 변경되는 경우 본 서비스에 이미지가 제대로 표시되지 않는 등 부작용이 발생할 수 있으므로 가급적이면 직접 링크가 아닌 다운로드 하여 안전한 위치에서 표시, 사용 하시는 것을 권장 합니다.
|
||||
|
||||
|
||||
### 연락처
|
||||
서비스 사용 신청은 [netsafe@kiso.or.kr](mailto:netsafe@kiso.or.kr) 주소로 간단한 업체 소개와 사용 용도 등을 적어 보내 주세요. 사용 신청 전, 사용 중에 기술적인 문의 등에 대해서도 같은 메일로 문의해 주시면 답변을 받아 보실 수 있습니다.
|
||||
|
||||
|
||||
### License
|
||||
Copyright © 2023 [(사)한국인터넷자율정책기구](https://www.kiso.or.kr/)
|
||||
|
||||
30
safekiso_admin/content/doc/contract.md
Normal file
30
safekiso_admin/content/doc/contract.md
Normal file
@@ -0,0 +1,30 @@
|
||||
**(사)한국인터넷자율정책기구 KSS(KISO Safeguard System)API 서비스**
|
||||
## 환영합니다!
|
||||
|
||||
### 서비스 이용 신청 안내
|
||||
|
||||
KISO 이용자보호시스템(KSS, KISO Safeguard System) API는 국내 대표 포털 네이버와 카카오로부터 제공받은 욕설·비속어 DB를 활용해 개발되었습니다.
|
||||
|
||||
해당 API는 약 60만 건의 욕설·비속어 DB를 활용해 입력된 표현 중 사전에 포함된 단어가 있는지 검사하고 그 결과를 필터링해 주는 서비스를 제공합니다.
|
||||
|
||||
본 서비스의 목적은 다양한 인터넷 서비스에서 사업자가 별도의 욕설·비속어 DB구축 및 유지 보수의 부담이 없이 욕설·비속어 표현에 대한 서비스 관리 및 운영에 도움을 드리는 것입니다.
|
||||
|
||||
|
||||
본 서비스를 이용하기 위해서는 먼저 한국인터넷자율정책기구의 사전 승인이 필요합니다.
|
||||
|
||||
아래 이메일 주소로 간단한 소개와 서비스 사용 목적 등을 알려 주시면 내부 검토 후 이후 절차를 안내 해 드리겠습니다.
|
||||
|
||||
문의 : netsafe@kiso.or.kr
|
||||
|
||||
|
||||
### 추가 정보
|
||||
|
||||
KSS에 대해 조금 더 알고 싶으시다면 아래 링크를 참고해 주세요
|
||||
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/">KSS 소개</a>
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/doc/guide">서비스 도입 안내</a>
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/doc/api_doc">API 연동 안내</a>
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/doc/certification">인증 로고 안내</a>
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/docs/stipulation">서비스 이용 약관</a>
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/docs/privacy">개인정보 보호 정책</a>
|
||||
|
||||
100
safekiso_admin/content/doc/guide.md
Normal file
100
safekiso_admin/content/doc/guide.md
Normal file
@@ -0,0 +1,100 @@
|
||||
**(사)한국인터넷자율정책기구 KSS(KISO Safeguard System)API 서비스**
|
||||
## 서비스 도입 안내
|
||||
|
||||
### 첫번째 고려 사항
|
||||
모든 IT 서비스들은 24시간 365일 정상 동작하는 것을 목표로 하지만 때로는 그렇지 못한 경우가 있습니다. KSS API 서비스를 여러분의 서비스에 이용하시려는 경우 가장 먼저 생각해야 하는 것은 언제라도 본 서비스가 동작하지 않을 수 있다는 점입니다. KSS의 모든 기술 스텝들은 최선을 다하여 시스템을 모니터링 하고 유지 하겠지만, 돌발 상황이 발생하여 시스템이 동작을 멈추는 경우라도 여러분의 서비스를 이용하는 사용자들에게는 불친절한 모습을 보이지 않도록 최대한 세심하게 도입 설계를 해 주세요. 짧게 말씀 드리자면, KSS가 응답하지 않는다고 해서 여러분의 서비스가 멈추도록 해서는 안된다는 의미 입니다. 이하의 내용은 그와 관련된 몇 가지 안내와 의견입니다.
|
||||
|
||||
### 서비스 가입 계정의 선택
|
||||
이 문서를 둘러 보시고 서비스 이용을 해 보려 하시는 경우 가입에 사용하는 이메일은 담당자 개인 메일이 아닌 조직의 역할 이메일((예를 들면 admin@ 혹은 infra@와 같은)을 사용하시는 것을 권합니다. 그리고 로그인에 사용하는 메일 계정으로 수신되는 메일을 자주 모니터링 하지 않는 경우에는 서비스로부터의 중요한 공지 사항등을 수신할 수 있도록 서비스 내에 개인 정보 수정 항목에서 이메일 주소를 늘 모니터링 되는 이 메일 주소로 변경해 주세요.
|
||||
|
||||
|
||||
### 인증 로고 활용의 검토
|
||||
KSS를 활용하여 얻을 수 있는 장점으로 표준화된 필터와 기준의 적용을 사용자들에게 안내 하여 서비스에 대한 신뢰를 높일 수 있다는 점이 가장 크다고 생각합니다. 여러분이 본 서비스를 활용하시려는 경우에는
|
||||
<a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/doc/certification" >인증 로고 안내</a>
|
||||
의 내용도 참고해 주세요.
|
||||
|
||||
|
||||
|
||||
### 가장 일반적인 사용의 예
|
||||
웹 페이지에서 DB에 게시물을 작성하는 경우를 예로 들어 보겠습니다. 사용자측에서 작성된 내용을 DB에 저장해 달라는 요청이 들어오면 서버에서는 먼저 해당 계정이 적절한 권한을 가지고 있는지 등을 검사하고 만약 조건에 맞지 않는 요청이라면 오류 메세지를 리턴합니다. 이 과정(여러가지 권한 검사)에 KSS API 호출 과정도 추가하여 만약 검사 결과가 적절치 못하다면 이런 표현은 달리 바꿔 달라는 오류 메세지로 사용자에게 되돌려 줄 수 있습니다. 만약 특정 시점에 KSS API가 정상 동작하지 않는다면(타임아웃이 될 동안 응답이 오지 않거나 서버가 아예 응답이 없거나 등) 그 사실을 그대로 사용자에게 오류 메세지로 표시하는 결과를 되돌릴 수 있습니다.
|
||||
|
||||
>본문 검사 과정에서 오류가 발생하였습니다. 잠시 후에 다시 시도해 주세요.
|
||||
|
||||
이 경우, KSS API가 정상 동작하지 않는다면 게시물의 작성이나 댓글 등이 모두 멈춘다는 단점은 있으나 구현이 가장 단순하고 사용자에게도 혼란이 가장 적은 일반적인 적용 예라 할 수 있습니다.
|
||||
|
||||
|
||||
### 실시간 채팅, 메세징에서 사용하는 경우
|
||||
실시간 채팅이나 메세지도 결국은 중계를 위해 서버를 거치게 되는데 이 과정에서 메세지를 보낸 사용자의 자격이나 계정 등에 대해 기본적인 검사를 하게 됩니다. 이 부분에 필터 API의 호출 부분을 넣어 그 결과에 따라 필터를 적용한 메세지로 바꿔 전달하거나 혹은 전송 요청을 한 사용자에게 전송 거부의 오류 메세지를 되돌려 줄 수 있습니다. 예를 든다면
|
||||
|
||||
>이런 개자식을 봤나.
|
||||
|
||||
이런 입력은
|
||||
|
||||
>이런 ***을 봤나.
|
||||
|
||||
혹은 오류 메세지로 전송을 거부할 수 있습니다.
|
||||
|
||||
>부적절한 표현들이 포함되어 있습니다. '개자식'
|
||||
|
||||
이 경우 서버측의 회신 메세지 예는 아래와 같고, 응답시간은 33밀리초 입니다.
|
||||
```
|
||||
{
|
||||
"TrackingId": "7408a8f2-5843-59f5-8352-9ef2f80d89ec",
|
||||
"Status": {
|
||||
"Code": 2000,
|
||||
"Message": "OK",
|
||||
"Description": ""
|
||||
},
|
||||
"Detected": [
|
||||
[
|
||||
3,
|
||||
"개자식"
|
||||
]
|
||||
],
|
||||
"Filtered": "이런 ***을 봤나.",
|
||||
"Elapsed": "0 s, 10.448 ms"
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### API 키를 클라이언트에서 사용하는 경우
|
||||
일반적인 상황이라면 API 키는 서버측에서 사용하고 사용자측, 클라이언트측에 노출되지 않도로고 하는 것이 최선입니다. 하지만 부득이하게 클라이언트측에서 사용해야 하는 경우라면 일정 시간마다 해시값을 발생시키고 이를 API 키 호출에 추가하여 서버측에서 이 값을 검사하고 만약 복사된 키가 계속 사용된다면 오류를 되돌리도록 할 수 있습니다. 구체적인 해시 키 사용과 설정의 방법은
|
||||
<a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/doc/api_doc" >API 연동 안내</a>
|
||||
문서를 참고해 주세요. 단, 이 기능은 바로 사용하실 수 없으며 저희 기술팀에 문의하여 키를 이 방식 처리에 대응하도록 설정해야 합니다. 관련된 문의는 [netsafe@kiso.or.kr](mailto:netsafe@kiso.or.kr)로 메일 주세요.
|
||||
|
||||
### KSS가 멈춘 동안 작성된 필터 되지 않은 컨텐츠의 처리
|
||||
사용자가 클라이언트측에서 무언가를 입력하고 전송 버튼을 누른 경우, 게시물의 댓글을 예로 들어 보겠습니다. 댓글은 우선 서버에서 KSS API 서비스를 호출하여 부적절한 표현이 포함되어 있는지 검사하고 만약 검사 결과가 좋지 않다면 사용자에게 이 내용은 DB에 입력할 수 없다는 오류 메세지를 출력하는 것이 일반적인 흐름입니다. 그런데 만약 KSS API가 응답이 없다면 어떻게 할까요? 어떤 댓글은 모욕적인 표현이 없는 상태로 저장되었지만 어떤 운 좋은 댓글들은 모욕적인 표현들이 그대로 포함된 채로 게시될 것입니다. 이렇게 만에 하나 발생할 수 있는 간헐적인 장애로 모욕적인 표현의 필터가 동작하거나 하지 않을 수 있는 불일치가 서비스 품질에 심각한 영향을 준다면 조금 작업이 복잡해 지긴 하지만 안전 장치를 할 수 있습니다.
|
||||
|
||||
게시물의 댓글 DB에 현재 이 댓글이 필터가 완료된 상태인지 필터 전인지를 표시하는 플래그와 DB에 저장된 시간(이 값은 보통 이미 있겠지요)을 저장합니다. 그리고 욕설·비속어 필터가 통과되지 않은 댓글은 '처리중'이라는 텍스트가 대신 표출되도록 해 둡니다. 댓글을 저장할 때 KSS API를 비동기 방식으로 호출할 수 있으며 처리가 끝난 후 호출될 콜백 주소를 지정할 수 있습니다. 이곳에서 해당 댓글의 검사 결과가 깨끗하다면 필터 완료로 마크하고 사용자들에게 댓글은 정상 표출될 것입니다. 만약 특정 시점에 KSS API의 동작이 실패하여 일정 시간(보통 5초 이내)이 지났음에도 필터가 완료 마크되지 않은 항목들은 한번 더 KSS 검사를 동기 방식으로 요청하여 직접 그 결과를 처리할 수 있습니다. 이런 시나리오에 필요한 세부적인 API 호출 파라메타와 예시는 <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/doc/api_doc" >API 연동 안내</a> 문서를 참고해 주세요.
|
||||
|
||||
|
||||
### DB를 직접 활용하거나 인공지능을 이용해 욕설·비속어을 검출하는 방식에 대한 의견
|
||||
KSS API 서비스는 국내 대형 포털에서 오랜 기간 고객 응대를 하며 축적된 대량의 욕설·비속어 단어 DB를 기반으로 합니다. 어떤 경우에, 사업적인 판단에 의해, 여러분의 서비스에 자체적인 욕설·비속어 DB를 구축하고 유지하는 것에 대해 검토하실 수 있습니다. 저희가 본 서비스를 구축하게 된 계기도 바로 그 지점에 대한 고민이었습니다. 우선 현실적으로 한글로 된 적절한 DB를 최초 획득하는 것이 쉽지 않습니다. 어찌 하여 꽤 괜찮은 DB를 구했다 하더라도 새로운 표현이 계속 만들어 지기 때문에 결국은 이 시스템으로 일손을 던다기 보다는 그 DB를 계속 최신으로 유지하기 위한 노력이 시스템 구축의 비용보다 장기적으로는 더 많이 든다고 생각하게 되었습니다. DB 비교 방식의 장점은 특정 이슈에 즉각적으로 대응할 수 있다는 것입니다. 우리는 그 장점과 거대한 DB를 항상 최신으로 유지하며 표준적인 가이드를 제시하는 역할을 누군가 해 준다면 회원사들이 조금 더 서비스 본연에만 집중할 수 있지 않을까 생각 했습니다. 인공지능으로 전혀 새로운, 욕설·비속어을 발견하는 것이 가능은 합니다. 하지만 결국 사용자의 컴플레인으로 그 판정들을 다시 리뷰하고 그 결과를 인공지능 엔진에 적용하는 작업이 간단하지 않습니다. 결국 욕설·비속어에 대한 필터링은 고객 응대 이슈와 끊임 없이 맞물리게 되므로, 저희가 표준화된 가이드를 제공하고 회원사들이 그것을 이용하는 것이 각자 역할의 분담이 될 것이라고 생각 합니다.
|
||||
|
||||
|
||||
|
||||
|
||||
### 개인 정보와 관련된 이슈
|
||||
KSS API 서비스를 사용하기 위해서는 이메일 주소로 가입이 필요하며 저희가 수집하는 개인정보는 이메일 주소 뿐입니다. 나머지 항목들은 필수적인 항목이 아니며, 운영자가 사용자를 식별하기 위해 메모의 형식으로 별도 보관하는 항목들은 다음과 같습니다.
|
||||
|
||||
> 업체명, 담당자 이름, 직함
|
||||
|
||||
API 서비스를 호출하게 되면 서버는 주어진 문장을 검사하여 필터 결과만을 리턴하며 후에 통계를 생성할 목적으로 다음과 같은 내용의 로그를 남깁니다.
|
||||
|
||||
```
|
||||
{
|
||||
TrackingId: 호출 고유 아이디,
|
||||
uid: API 키 소유자 내부 아이디(이메일 주소 아님),
|
||||
key: API 키,
|
||||
hit: 검출된 단어 수,
|
||||
words: 검출된 단어들,
|
||||
size: 전송된 원문의 크기,
|
||||
referrer: 웹 요청 리퍼럴,
|
||||
ip: 웹 요청 아이피,
|
||||
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### 기타 문의
|
||||
본 서비스와 관련해 궁금하신 점이 있다면 [netsafe@kiso.or.kr](mailto:netsafe@kiso.or.kr)로 메일 주세요.
|
||||
36
safekiso_admin/content/doc/manual.md
Normal file
36
safekiso_admin/content/doc/manual.md
Normal file
@@ -0,0 +1,36 @@
|
||||
**(사)한국인터넷자율정책기구 KSS(KISO Safeguard System)API 서비스**
|
||||
## 웹 어드민 기능 안내
|
||||
|
||||
KSS API를 사용하는데 필요한 어드민 기능을 제공 합니다. 아래와 같은 기능들을 이용하실 수 있습니다.
|
||||
|
||||
|
||||
### 서비스 로그인 관련 기능
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/user/info">회원 정보 수정 / 회원 탈퇴</a>
|
||||
- 회원 정보를 수정하거나 탈퇴 기능을 수행할 수 있습니다.
|
||||
|
||||
|
||||
### API 키 관리 관련 기능
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/key/list">API 키 리스트</a>
|
||||
- 내가 만든 API 키 리스트를 볼 수 있습니다. 리스트에 원하는 항목의 <span class="font-semibold text-indigo-600 hover:text-indigo-500">상세 보기</span> 링크를 선택 하시면 상세 정보를 보고 관리할 수 있습니다.
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/key/deleted">삭제된 API 키 리스트</a>
|
||||
- 삭제된 키 리스트를 볼 수 있고 복구할 수도 있습니다. 리스트에 원하는 항목의 <span class="font-semibold text-indigo-600 hover:text-indigo-500">상세 보기</span> 링크를 선택 하세요.
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/key/new">새로운 키 생성</a>
|
||||
- 키의 이름은 내가 보유한 여러 키를 식별하기 위해 입력하는 것입니다.
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/filter">필터 테스트</a>
|
||||
- 어떤 문장을 입력하고 필터를 수행하여 어떤 결과가 나오는지를 미리 볼 수 있습니다.
|
||||
|
||||
|
||||
|
||||
### API 키 사용 통계 관련 기능
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/statistics">API 사용량 통계</a>
|
||||
- 내가 보유한 모든 키의 사용량을 합한 통계를 볼 수 있습니다. 개별 키의 사용량은 개별 키 항목의 <span class="font-semibold text-indigo-600 hover:text-indigo-500">상세 보기</span> 링크를 선택 하신 후 우측 상단 버튼을 선택하면 보실 수 있습니다.
|
||||
|
||||
|
||||
### 기타 기능
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/support/notice">공지 사항</a>
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/support/faq">자주 묻는 질문과 답변</a>
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/support/inquiry">1:1 문의</a>
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/doc/certification">인증 로고 안내</a>
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/docs/stipulation">서비스 이용 약관</a>
|
||||
- <a class="font-semibold text-indigo-600 hover:text-indigo-500" href="/docs/privacy">개인정보 보호 정책</a>
|
||||
|
||||
Reference in New Issue
Block a user